Smarty и блоки в CMS

player

Новичок
Smarty и блоки в CMS

Привет!

Хочу вставлять блоки в CMS покрасивее, чтобы у каждого блока был темплейт. Но проблема в том что тогда не получается эффективно отделять код от темплейта. выглядит примерно так:

код пхп
$smarty->assign()
$smarty->display(header.tpl)

потом после пары строчек темплейта нада добавлять блоки, и как это делать? инклюдить в темплейт include_php помоему тоже бред...
Буду рад услышать элегантные решения...
 

kost

Новичок
Читайте phpinside. Честно только что не нашел номер)))

Смысл вкратце обьясню.

1. Регистрируем плугин.
PHP:
<?php
// Smarty function Component
//
// @author Feskov Kuzma
function smarty_function_component($params, &$smarty) {
    // Считываем нужные обьекты
    $db = &$smarty->get_registered_object('db');
    if (empty($params['name'])) {
        $params['name'] = 'site_view';
    }
    if (is_file(ADMIN_LIBS_PATH . '/' . basename($params['name']) . '.component.php')) {
        require(ADMIN_LIBS_PATH . '/' . basename($params['name']) . '.component.php');
    } else {
        echo 'Компонент <strong>' . $params['name'] . '</strong> не найден';
        echo ADMIN_LIBS_PATH . '/' . basename($params['name']) . '.component.php';
    }
    unset($db);
}
?>
У себя в index.php (или где там) делаем

PHP:
// Регистрируем нужные обьекты
$smarty->register_object('db', $db);
В папке компонентов создаем нужный нам компонент (к примеру, news.component.php), который может обращаться к базе
PHP:
...
$news_num = $db->getOne("SELECT * FROM tblnews LIMIT ".(isset($params['limit']) ? $params['limit'] : 3));
...// дальнейшая работа с спользованием уже своих шаблонов
В главном шаблоне пишем
{component name="news" limit=5}

и все.
 

Toshka

Новичок
Эх, прочитал бы я это месяц назад) А то пришлось свой велосипед изобретать
 
Сверху