Шаблоны в PHP, а лучший способ уведомить приложение о том, что оно существует? - PullRequest
2 голосов
/ 12 февраля 2009

Я использую CodeIgniter и, скорее всего, буду использовать их библиотеку шаблонов, так как хочу, чтобы все было очень просто в использовании. Содержимое переменных шаблона будет поступать из базы данных, но я хочу, чтобы бизнес-администраторы знали, какие области содержимого доступны. В основном имена параметров, когда они выбирают конкретный шаблон. Например, Joomla использует дополнительный файл XML, который определяет каждую область, тогда как Wordpress использует комментарии в шаблоне страницы, чтобы сообщить системе, что файл PHP является шаблоном. Мне нравится подход Joomla, потому что вам не нужно анализировать файл PHP, чтобы найти области, но мне нравится подход Wordpress, потому что у вас нет дополнительного файла XML, связанного с каждым шаблоном. Есть ли другие подходы, которые мне не хватает?

Ответы [ 4 ]

1 голос
/ 24 февраля 2009

Я думаю, что лучше всего было бы добавить небольшой взлом в класс анализатора шаблонов. Код выглядит вполне читабельным и чистым в system / library / Parser.php. В этот класс можно вставить хук, который можно использовать для отслеживания переменных. Я не знаю, работает ли это, но вот фрагмент:

class CI_Parser {
    var $varCallback;
    function setVarCallback($callbackFunction) {
        $this->varCallback = $callbackFunction;
    }
    ...
    function _parse_single(...) {
        $callback = $this->varCallback;
        $callback($key);
    }
...

//Somewhere in your code
function storeVarName($variableName) {
    // Persist the variable name wherever you want here
}
$this->parser->setVarCallback('storeVarName');
1 голос
/ 18 февраля 2009

Вы можете сделать это прямо в контроллере:

// in the controller
print_r($data);
$this->load->view("main", $data);

Или немного более элементарно, но вы можете передать шаблону PHP array переменных (или object):

// in the controller
$data = array();
$data["namespace"] = array(
    "title" => "My website",
    "posts" => array("hi", "something else")
);
$this->load->view("main", $data);

И затем в представлении установите флаг print_r на namespace, чтобы показать все доступные переменные, чтобы бизнес-администраторы точно знали, что использовать.

// in the view
if(isset($namespace["showAllVars"])) print_r($namespace);
0 голосов
/ 22 февраля 2009

На мой взгляд, лучший подход - это хранить определения переменных в другом месте (например, в таблице базы данных или в отдельном файле). Это поможет с тестированием (то есть, программист не может просто удалить тег, и его больше нет) и убедиться, что все работает, пока вы продолжаете разработку приложения вовремя.

Еще одним преимуществом является то, что логика вашего приложения будет независима от механизма шаблонов.

Кстати, если вы ожидаете много трафика, вы можете вместо этого использовать smarty. Мы провели обширное тестирование с большинством шаблонизаторов, и smarty - самый быстрый.

0 голосов
/ 19 февраля 2009

Один из вариантов - вызвать token_get_all в файле PHP (только когда ваши бизнес-администраторы загружают его) и проанализировать его вывод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...