Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Шаблонизатор или его наподобие, на мой взгляд кажется удобным 
:(
    Опции темы
stalkerok
  Дата 28.12.2007, 18:01 (ссылка)    | (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 28.12.2007

Репутация: нет
Всего: нет



Привет всем.! сразу оговорюсь целью не ставится условия в шаблоне (подсветка, размер шрифта и т.д.) 
а простой вывод и соединение.
Вопрос: Можно ли это использовать? и какие последствия могут быть.? И чтобы вы посоветовали?


Присоединённый файл ( Кол-во скачиваний: 17 )
Присоединённый файл  www.zip 1,31 Kb
PM MAIL   Вверх
SamDark
Дата 28.12.2007, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый кот
***


Профиль
Группа: Участник
Сообщений: 1424
Регистрация: 25.7.2006
Где: Voronezh

Репутация: 10
Всего: 38



stalkerok
Перечитайте с первой до последней страницы:
http://forum.vingrad.ru/topic-54581/unread-1/40.html


--------------------
rmcreative.ru — Это жжж неспроста...
yiiframework.ru — О фреймворке Yii на русском.
reggi — здесь я регистрирую домены
PM MAIL WWW GTalk Jabber MSN   Вверх
stalkerok
Дата 29.12.2007, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 28.12.2007

Репутация: нет
Всего: нет



SamDark причитал. 
Вопрос такой: в моем варианте скрипт загружает шаблон выделяет блоки соединяет всю информацию и выводит.
в вашем варианте шаблон запускает функции из скриптов, и чтобы сменить дизайн надо будет попотеть, если учесть что сайт динамичный.
Конечно у моего варианта тоже не всё гладко но всёже.

Как лучше делать?

и намного ли удобней XML (если да скиньте пример для PHP5).
PM MAIL   Вверх
FractalizeR
Дата 29.12.2007, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 273
Регистрация: 27.12.2007
Где: Россия/Москва

Репутация: 2
Всего: 4



Цитата(stalkerok @ 28.12.2007,  18:01)
Привет всем.! сразу оговорюсь целью не ставится условия в шаблоне (подсветка, размер шрифта и т.д.) 
а простой вывод и соединение.
Вопрос: Можно ли это использовать? и какие последствия могут быть.? И чтобы вы посоветовали?

Мне вообще не понятен ваш вопрос. Вы можете его нормально сформулировать?
Что за "простой вывод и соединение"? Чем вас не устраивает http://smarty.php.net?


--------------------
Чтобы поблагодарить или наоборот поругать участника форума лучше пользоваться значками "+" и "-", изменяющими репутацию. Они находятся слева от поста под именем пользователя.
PM MAIL   Вверх
stalkerok
Дата 29.12.2007, 23:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 28.12.2007

Репутация: нет
Всего: нет



FractalizeR 

1.Шаблонизатор должен быть прост т.е. замена переменных , раэделение шаблона на блоки
2.smarty грамосткий и т.д.
3.хочется своего.

PM MAIL   Вверх
FractalizeR
Дата 31.12.2007, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 273
Регистрация: 27.12.2007
Где: Россия/Москва

Репутация: 2
Всего: 4



Цитата
1.Шаблонизатор должен быть прост т.е. замена переменных , раэделение шаблона на блоки

Смарти достаточно простой. Там нет ничего сложного. Абсолютно.

Цитата
2.smarty грамосткий и т.д.

Вам жалко пары десятков килобайт серверного места? Или вы пишете код под серверы с дикой нагрузкой? Оптимизировать код, чтобы он быстрее выполнялся, нужно только тогда, когда налицо проблема быстродействия и вы поймали узкое место профайлером.

Цитата
3.хочется своего.

Это другое дело, но тогда причем тут ваш вопрос? Вы задали его так абстрактно, что дальше некуда. Будет у вас что-то написано и будут вопросы - задавайте, но только конкретно.


--------------------
Чтобы поблагодарить или наоборот поругать участника форума лучше пользоваться значками "+" и "-", изменяющими репутацию. Они находятся слева от поста под именем пользователя.
PM MAIL   Вверх
stalkerok
Дата 1.1.2008, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 28.12.2007

Репутация: нет
Всего: нет



FractalizeR 

см. в начале темы в прикрепленном файле.
PM MAIL   Вверх
FractalizeR
Дата 3.1.2008, 01:49 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 273
Регистрация: 27.12.2007
Где: Россия/Москва

Репутация: 2
Всего: 4



Написание кода без комментариев, пусть даже короткого и, казалось бы, понятного кода - плохая привычка. Думаю, вам стоит начать комментировать код хотя бы в стиле phpDocumentor.

Сам код не показался мне удачным.

1. Метод присваивания переменной шаблона значения почему-то назван set_tpl, а метод загрузки самого шаблона из файла - get_tpl. имена методов выбраны неудачно, поскольку обычно set/get - это имена методов доступа к значениям скрытого поля класса (свойство). Лучше переименовать set_tpl в set_var или, как у смарти assign (или скажем, assignvar).
2. Название метода вывода отрендереного шаблона tpl_parse мне тоже кажется неудачным. Парсинг - это разбр чего-то, а не вывод уже готовой информации. render подшло бы больше, на мой взгляд.
3. tpl_parse выводит, не отрендереный шаблон целиком, как ожидалось, а только отрендереный результат последнего вызова get_block, чего никак нельзя ожидать исходя из смысла названия класса и самого метода. 
4. Метод tpl_parse зависит от результата вызова get_block, чего никак нельзя ожидать исходя из интерфейсной части класса (объявления). 

Проектировать библиотеки следует таким образом, чтобы понять, как ее использовать, можно было лишь взглянув на public объявления, не копаясь в реализации. В вашем случае это невозможно.

В вашем случае я бы предложил другую архитектуру (надеюсь, я угадал, что вам нужно). Следующий пример будет написан наполовину в псевдокоде, поэтому не стоит ожидать, что он заработает, будучи вставленным в скрипт smile 

Код

<?php

/**
 * Class to handle template operations
 *
 */
class tpl_class {

    /**
     * Internal associative array to store template variable values
     *
     * @var array
     */
    private $_vars = array ( );
    
    /**
     * Variable to store the whole template
     *
     * @var string
     */
    private $_templateContents;

    /**
     * Function loads template from file system
     *
     * @param string $filename Filename to load template from
     */
    public function loadTemplateFile($filename) {
        //TODO
    }

    /**
     * Function assigns template variable with value
     *
     * @param string $varName Variable name
     * @param mixed $varValue Variable value
     */
    public function assignVar($varName, $varValue) {
        $this->_vars [$varName] = $varValue;
    }

    /**
     * Function returns rendered template block contents
     *
     * @param string $blockName Name of the template block to render
     * @return string Rendered contents
     */
    public function getRenderedBlockContents($blockName) {
        //Checking if template is loaded
        $this->_assertTemplateFileLoaded();
        
        //Extracting block from template
        $blockContents = $this->_getTemplateBlock($blockName);
        
        //Inserting variables into block
        $blockContents = $this->_replaceVariablesWithValues($blockContents);
        return $blockContents;
    }

    /**
     * Function renders template block to output
     *
     * @param string $blockName
     */
    public function renderBlock($blockName) {
        echo $this->getRenderedBlockContents($blockName);
    }
    
    /**
     * Function extracts specified block from template
     *
     * @param string $blockName Block name to extract
     * @return string Block contents
     */
    protected function _getTemplateBlock($blockName) {
        //TODO
    }
    
    /**
     * Function replaces all template variables in passed text with their values
     *
     * @param string $blockContents Text in which to replace variables
     * @return string Processed text
     */
    protected function _replaceVariablesWithValues ($blockContents) {
        //TODO
    }
    
    /**
     * Function to check if template  was loaded
     *
     */
    protected function _assertTemplateFileLoaded() {
        if (empty($this->_templateContents)) {
            throw new MyTplException('Template not loaded!');
        }
    }
}
?>


Обратите внимание, что все-таки архитектура достаточно проста и пригодна лишь для самых простых случаев. Скажем, поведение не определено, если в шаблоне окажется два блока с одним и тем же именем. О безопасности, я так понимаю, речь не идет, кроме самих себя нам защищаться не от кого, правильно? Потому что, если есть от кого, все становится намного более сложным.
Мою реализацию, наверное, тоже не назовешь слишком удачной, но это то, что пришло в голову за пять минут, пока смотрел ваши исходники.

Да, кстати, поиск блоков внутри текста шаблона вам лучше выполнять не с помощью регулярных выражений, а с помощью двух strpos и substr. Думаю, так будет быстрее. Вы ведь точно знаете текст тега, который вы ищете.

Это сообщение отредактировал(а) FractalizeR - 3.1.2008, 16:15


--------------------
Чтобы поблагодарить или наоборот поругать участника форума лучше пользоваться значками "+" и "-", изменяющими репутацию. Они находятся слева от поста под именем пользователя.
PM MAIL   Вверх
smartov
Дата 3.1.2008, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

Репутация: 7
Всего: 259



Согласен с тем, что прокомментировал FractalizeR кроме
Цитата(FractalizeR @  3.1.2008,  00:49 Найти цитируемый пост)
Да, кстати, поиск блоков внутри текста шаблона вам лучше выполнять не с помощью регулярных выражений, а с помощью двух strpos и substr. Думаю, так будет быстрее. Вы ведь точно знаете текст тега, который вы ищете.

Потом, при более сложной структуре (вложенности и пр) проблем не оберешься. 
Но если вложенность не планируется - то конечно можно. Правда зачем strpos substr... str_replce и всех делов smile
PM MAIL   Вверх
FractalizeR
Дата 3.1.2008, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 273
Регистрация: 27.12.2007
Где: Россия/Москва

Репутация: 2
Всего: 4



Цитата(smartov @ 3.1.2008,  16:24)
Согласен с тем, что прокомментировал FractalizeR кроме
Цитата(FractalizeR @  3.1.2008,  00:49 Найти цитируемый пост)
Да, кстати, поиск блоков внутри текста шаблона вам лучше выполнять не с помощью регулярных выражений, а с помощью двух strpos и substr. Думаю, так будет быстрее. Вы ведь точно знаете текст тега, который вы ищете.

Потом, при более сложной структуре (вложенности и пр) проблем не оберешься. 
Но если вложенность не планируется - то конечно можно. Правда зачем strpos substr... str_replce и всех делов smile

В рамках текущей архитектуры невозможно иметь два блока внутри шаблона с одинаковым именем. Если изменится архитектура - тогда, конечно. Кроме того, в исходном коде stalkerok просто тупо берется первое совпадение регулярному выражению в качестве блока. Фактически полный аналог strpos и иже с ним.


--------------------
Чтобы поблагодарить или наоборот поругать участника форума лучше пользоваться значками "+" и "-", изменяющими репутацию. Они находятся слева от поста под именем пользователя.
PM MAIL   Вверх
FractalizeR
Дата 5.1.2008, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 273
Регистрация: 27.12.2007
Где: Россия/Москва

Репутация: 2
Всего: 4



stalkerok
вы бы хоть высказались, что ли.... А то вам тут наотвечали, а вы молчите...


--------------------
Чтобы поблагодарить или наоборот поругать участника форума лучше пользоваться значками "+" и "-", изменяющими репутацию. Они находятся слева от поста под именем пользователя.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0808 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.