ФорумПрограммированиеPHP для идиотов → Вывод информации

Вывод информации

  • Professor

    Сообщения: 2089 Репутация: N Группа: Адекваты

    Spritz 7 сентября 2009 г. 8:51

    Интересует как вы выводите нужный блок в ваших проектах?


    Допустим, у меня есть класс для управления новостями News

    Я хочу просто написать так

    $news->show("left");


    И чтоб у меня в левом блоке появился список новостей
    <li>первая новость<li>

    <li>какая то новость<li>


    Но для этого нужно чтоб класс News знал о шаблонизаторе и о класе для работы с БД.
    Я думаю что знания о шаблонизаторе лишние.

    тогда можно делать так

    $quicky->assign('news',$news->show());
    $quicky->setIncludeFile("news.tpl","left");

    и постоянно когда нужно выводить новости придется ставить эти 2 строчки.


    Как делаете вы?
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 7 сентября 2009 г. 8:56, спустя 5 минут 51 секунду

    например я для этого использую функции шаблонизатора, если это смарти, то например

    {show_news}

    ну и function smarty_show_news($tpl,$args)
    {
    return News::instance()->show_news_block_left();
    }

    ну или в своем это тоже чтото подобное получается :)

    Сапожник без сапог
  • Professor

    Сообщения: 2089 Репутация: N Группа: Адекваты

    Spritz 7 сентября 2009 г. 9:09, спустя 12 минут 50 секунд

    phpdude, а у тебя все шаблоны в 1 папке лежат?
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 7 сентября 2009 г. 9:24, спустя 15 минут 3 секунды


    phpdude, а у тебя все шаблоны в 1 папке лежат?
    я дурак по твоему? или говнокмс строитель стандартный? нет, конечно все по папочкам разнесено
    Сапожник без сапог
  • Lirck

    Сообщения: 1658 Репутация: N Группа: Джедаи

    Spritz 7 сентября 2009 г. 9:34, спустя 9 минут 44 секунды

    я дурак по твоему? или говнокмс строитель стандартный? да, конечно все в одной папке
    Спустя 241 сек.
    Professor, ваще нахуй классу ньюс знать чтото? просто делай все классы которые чето в шабе выводят через один интерфейс, или просто подготавливай ответ класса ньюс в виде массива

    <?php $news = News::get(10) ?>
    <?php foreach ($news as $post): ?>
    <h1><?php echo $post['title'] ?></h1>
    <?php echo $post['content'] ?>
    <?php endforeach ?>

    Спустя 123 сек.
    ну или в смарти таким же раком (ну типа как phpdude предложил) :)
  • LIFF

    Сообщения: 188 Репутация: N Группа: Адекваты

    Spritz 8 сентября 2009 г. 1:26, спустя 15 часов 51 минуту 44 секунды


    <div id="content">
       <?= $this->news()->left; ?>
    </div>


    а шаблоны я храню в стуруктурированном виде, примерно как в ZF.
  • NRG

    Сообщения: 4761 Репутация: N Группа: в ухо

    Spritz 8 сентября 2009 г. 1:24, спустя 23 часа 58 минут 36 секунд

    вместо <?= лучше не ленится и писать <?php echo
  • LIFF

    Сообщения: 188 Репутация: N Группа: Адекваты

    Spritz 8 сентября 2009 г. 1:27, спустя 2 минуты 45 секунд


    вместо <?= лучше не ленится и писать <?php echo



    эт я сюда такой код кинул, а в рабочем проекте у меня все нормуль..
  • Professor

    Сообщения: 2089 Репутация: N Группа: Адекваты

    Spritz 8 сентября 2009 г. 2:47, спустя 1 час 19 минут 56 секунд

    только aivee, понял  в чем заключался вопрос (или случайно попал).
    Но написал фигню =)

    ну вот о чем это мне говорит?
    <?= $this->news()->left; ?>

    вы мне внутренность покажите.
    Каким мокаром вы из базы новости достаете и как в шаблон запихиваете, причем так, что бы в коде было как можно меньше строк. =)


    На счет этого.
    <?php $news = News::get(10) ?>
    <?php foreach ($news as $post): ?>
    <h1><?php echo $post['title'] ?></h1>
    <?php echo $post['content'] ?>
    <?php endforeach ?>



    у меня есть шаблонный файл вывода новостей. Допустим такой:
    news.tpl
    <?php foreach ($news as $post): ?>
    <h1><?php echo $post['title'] ?></h1>
    <?php echo $post['content'] ?>
    <?php endforeach ?>


    тогда я в коде должен написать
    <?php 
    $news = News::get(10) ;
    $quicky->assign('news',$news);
    $quicky->setIncludeFile("news.tpl","left");
    ?>


    ну собственно что я и написал в первом посте.
    Тут возникает 1 проблема, из за которой я и создал топик.
    У меня для каждого модуля (мож не модуля, хз как назвать.Пример: панель администратора и вседоступный интерфейс) своя папка под шаблоны.
    шаблон news.tpl лежит в третьей папке.
    пиэтому прийдется при выводе новостей менять и дирректорию шаблонов в шаблонизаторе. примерно так:
    <?php 
    $news = News::get(10) ;
    $quicky->temp="/template/news/";
    $quicky->assign('news',$news);
    $quicky->setIncludeFile("news.tpl","left");
    $quicky->temp="/template/admin/";
    ?>

    и получается что для вывода новости требуется 5 строк. А что бы их засунуть в класс News нужно что бы этот класс знал о шаблонизаторе.

    Вот такие пироги.
    Скажите что я дурак и покажите решение в 1 строчку =)



  • NRG

    Сообщения: 4761 Репутация: N Группа: в ухо

    Spritz 8 сентября 2009 г. 2:54, спустя 6 минут 57 секунд

    Professor, бейби, разбей логику вывода на лейауты и темплейты
  • Professor

    Сообщения: 2089 Репутация: N Группа: Адекваты

    Spritz 8 сентября 2009 г. 3:14, спустя 20 минут 19 секунд


    Professor, бейби, разбей логику вывода на лейауты и темплейты

    А схематический пример можно?
  • Troy

    Сообщения: 2532 Репутация: N Группа: Джедаи

    Spritz 8 сентября 2009 г. 3:25, спустя 10 минут 40 секунд

    Новости не должны заморачиватся в каком блоке выводится , должны толь отдавать данные
  • NRG

    Сообщения: 4761 Репутация: N Группа: в ухо

    Spritz 8 сентября 2009 г. 3:26, спустя 57 секунд

    я тебе на словах попробую обьяснить…

    лейауты описывают схему включения теплейтов.

    т.е. :
    в лейауте типа пишешь
    <layout>
       <my_awesome_page>
           <reference name="content">
               <block template=="templates/news_edit.phtml" name="news_edit"></block>
           </reference>
           <reference name="left">
               <block template=="templates/news_view.phtml" name="news_view"></block>
           </reference>
       </my_awesome_page>
    </layout>


    а в темплейте саму темплейту))
    надеюсь суть понятна  =)
  • artoodetoo

    Сообщения: 5139 Репутация: N Группа: в ухо

    Spritz 8 сентября 2009 г. 3:32, спустя 6 минут 3 секунды


    У меня для каждого модуля (мож не модуля, хз как назвать. …

    новости можно считать "виджетом", который впендюривается в макет страницы. конечно виджет не должен "знать" в какое место он вставлен :)
    ιιlllιlllι унц-унц
  • Professor

    Сообщения: 2089 Репутация: N Группа: Адекваты

    Spritz 8 сентября 2009 г. 3:37, спустя 5 минут 5 секунд

    В общем понятно что ничего не понятно=)

    Бля пока писал ответ допедрило =)

    NRG, респект, спасибо. Походу понял куда копать =)

Пожалуйста, авторизуйтесь, чтобы написать комментарий!