За последние 24 часа нас посетили 17489 программистов и 1722 робота. Сейчас ищут 946 программистов ...

Создание и применение объекта класса внутри tpl

Тема в разделе "Прочие вопросы по PHP", создана пользователем ЛетучийЗмей, 26 дек 2014.

  1. ЛетучийЗмей

    ЛетучийЗмей Новичок

    С нами с:
    21 авг 2014
    Сообщения:
    7
    Симпатии:
    0
    Доброго времени.
    Речь пойдёт о Smarty 2.
    Есть php-файл с кодом:
    Код (Text):
    1.  
    2. ...
    3. $smarty = new Smarty();
    4. $smarty->display('sometpl.tpl');
    Файл sometpl.tpl:
    Код (Text):
    1.  
    2. {php}
    3. class someClass
    4. {
    5.   ...
    6.   public $arr = array();
    7.   ...
    8. }
    9.  
    10. $object = new someClass();
    11. {/php}
    Задача - сделать так, чтобы объект $object со всеми своими свойствами и методами оказался доступен во всём остальном шаблоне sometpl.tpl, вне {php}{/php} . Т.е., например, чтобы где-то в sometpl.tpl можно было написать:
    {foreach from=$obj->arr item=it}
    ...
    {/foreach}
    где $obj ассоциирована с $object.
    Собственно, проблема в том, чтобы ассоциировать $obj и $object внутри sometpl.tpl. Подскажите, плиз, как это сделать.
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Классы создавать в шаблоне не следует, даже если smarty 2 это и позволяет...
     
  3. ЛетучийЗмей

    ЛетучийЗмей Новичок

    С нами с:
    21 авг 2014
    Сообщения:
    7
    Симпатии:
    0
    Я мог бы вынести класс в отдельный php-файл и подключить его в шаблоне через require_once... но с т.зр. рассматриваемой проблемы не вижу, что это меняет.
     
  4. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Это всё должно быть в контроллере, контроллер должен передать в шаблон уже готовые объекты.
     
  5. ЛетучийЗмей

    ЛетучийЗмей Новичок

    С нами с:
    21 авг 2014
    Сообщения:
    7
    Симпатии:
    0
    А как можно из {php}{/php} в sometpl.tpl сослаться на сам объект $smarty? Применение $this даёт ошибку почему-то...
     
  6. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
  7. ciamon

    ciamon Новичок

    С нами с:
    19 дек 2014
    Сообщения:
    34
    Симпатии:
    0
    Это, конечно, лично моё мнение и никого ни к чему не призываю. Но смарти - это бред. Чем пхп не шаблонизатор? С тем же успехом можно написать "include('мой шаблон.php');" и писать в этом шаблоне адекватный "<?php", а не пародию на пхп.
     
  8. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    В реальной жизни проектам занимаются много людей, и шаблонизатор помогает верстальщикам интегрировать в проект, то что они наверстали. Еще к шаблонизаторам можно относится как классу с наборам готовых функций и упрощенным синтаксисом.
     
  9. ciamon

    ciamon Новичок

    С нами с:
    19 дек 2014
    Сообщения:
    34
    Симпатии:
    0
    И чем вот это:
    {if $name eq 'Fred'}
    Welcome Sir.
    {else}
    Welcome, whatever you are.
    {/if}

    Лучше чем вот это:
    <?php if($name=='Fred') { ?>
    Welcome Sir.
    <?php } else { ?>
    Welcome, whatever you are.
    <?php } ?>

    Я не вижу чтобы смарти как-то упрощал синтаксис, особенно если учесть, что в доброй половине шаблонов, которые мне приходилось встречать, есть вставки "{php}...{/php}". Как их объяснить? Выходит верстальщик всё равно знает и пользуется основами пхп. Вон топикстартер даже описание класса в шаблон положил.
    И готовые инструменты - это, по большому счёту, псевдонимы для if, for, while и т.д.
     
  10. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Скажу за twig, на практике верстальщика легче научить синтаксису twig, чем php, так как всякие расширения используются и там уже есть готовые функции с более простым синтаксисом. Возможно мне везёт и попадаются только такие люди.
    Ещё блоки по умолчанию, иерархия блоков/шаблонов, фильтрация всех переменных и т.д.
     
  11. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Воу, полегче. Что там в пхп такого, что прям надо "учить"? Циклы?

    Например?

    Очень может быть, ибо мне в моей фирме попадались такие девочки, которым проще выучить десяток тегов HTML, чем освоить модные редакторы WYSIWYG с тысячей дурацких кнопок, которые родят убогий хтмл с пустыми абзацами и спанами, который ещё и чистить надо потом.

    И что-то я думаю, что если б надо было, то они бы форыч выучили бы за один раз.
     
  12. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Более правильно будет сказать, что верстальщики стали меньше ошибок совершать после перехода на синтаксис twig.
    Сами говорят, что легче воспринимать его, но это субъективно, мне что php что twig без разницы.
    Вот такой опыт.

    переменные по умолчанию очищаются от html
    наследование блоков и шаблонов.
    значения по умолчанию
    Я сам понимаю что этого мало, но это уже реализовано и людям нравится.

    Это хорошо, что люди хотят узнавать и учить что-то новое.