За последние 24 часа нас посетили 21116 программистов и 1109 роботов. Сейчас ищут 452 программиста ...

Движок для сайта.

Тема в разделе "Прочие вопросы по PHP", создана пользователем Hawk, 10 мар 2008.

Статус темы:
Закрыта.
  1. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    уже намного лучше. Не буду говорить что мой метод элегантнее (это не так), но все же я пришел к такому:

    PHP:
    1. /* файл page.php */
    2. <?php
    3.  
    4. class NewsPage extends Page
    5. {
    6.     function pageMain()
    7.     {
    8.         $this->wrapper->add('title', new TitleBlock('Последние новости'));
    9.         $this->wrapper->add('content', $this->blockLastNews());
    10.     }
    11.    
    12.     function pageList()
    13.     {
    14.         $this->wrapper->add('title', new TitleBlock('Все новости'));
    15.         $this->wrapper->add('content', $this->blockListNews());
    16.     }
    17.    
    18.     function blockLastNews()
    19.     {
    20.         $news = News::getLast(5);
    21.         return $this->getBlockNews($news);
    22.     }
    23.    
    24.     function blockListNews()
    25.     {
    26.         return $this->getBlockNews( News::getList() );
    27.     }
    28.    
    29.     function getBlockNews(News $news)
    30.     {
    31.         $blocks = array();
    32.         foreach ($news as $cnews)
    33.         {
    34.             $block = new NewsBlock();
    35.             $block->wrapper->add('date', $cnews->date);
    36.             $block->wrapper->add('text', $cnews->text);
    37.             $blocks[] = $block;
    38.         }
    39.         return $blocks;
    40.     }
    41. }
    42.  
    43. ?>
    44.  
    45. /* файл layot.tpl */
    46. <html>
    47. bla-bla-bla
    48. <?=$this->layot('title')?>
    49. bla-bla-bla
    50. <?=$this->layot('content')?>
    51. </html>
    52.  
    53. /* файл news.tpl */
    54. <div>
    55. Дата: <?=$this->layot('date')?>
    56. Текст: <?=$this->layot('text')?>
    57. </div>
     
  2. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    Вся логика представлений у меня ушла в классы типа TitleBlock, вся верстка в *.tpl
     
  3. tmanager

    tmanager Активный пользователь

    С нами с:
    12 мар 2008
    Сообщения:
    108
    Симпатии:
    0
    Посмотрел. Вникать сейчас не могу (заставляют работать), одно замечание: никак не предусмотрено, что сайт может иметь несколько языковых версий.
     
  4. tmanager

    tmanager Активный пользователь

    С нами с:
    12 мар 2008
    Сообщения:
    108
    Симпатии:
    0
    А не в ущерб ли гибкости?

    P.S. Мне проще, когда всё в одном файе. Не надо метаться между шаблоном и классом.
     
  5. dAllonE

    dAllonE Guest

    tmanager, пожалуйста, не забывайте о
    PHP:
    1. <?php  ?>
    А то много букв, без подсветки неудобно читать...

    А вообще несмотря на то что скодированно ИМХО как-то загадочно сама идея симпатична.
     
  6. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    Нет, не в ущерб, использование классов мне наоборот, добавляет гибкости

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


    PHP:
    1. <?php
    2.  
    3. class TitleBlock extends Block
    4. {
    5.     protected $content;
    6.    
    7.     function __construct( $content )
    8.     {
    9.         // Объект класса Translate уже знает какой язык надо подставлять
    10.         // Он оперирует с базой соответствий
    11.         $this->content = Translate::instance()->get($content);
    12.     }
    13. }
    14.  
    15. ?>
     
  7. Anonymous

    Anonymous Guest

    у меня были такие гипердинамические шаблоны. Шаблонов, как таковых, не было, страница собиралась полностью из класса шаблонизатора, но были шаблоны каждого из модулей. Из плюсов это давало возможность, например, определить модулю свой CSS и JS файл, и вообще повлиять на сборку страницы не вводя костылей в виде дополнительных парсингов и разборов уже задействованных шаблонов. От идеи позже отказался, ибо как сказал бы Цезарь, est rerum omnium magister usus (Опыт всему учитель).
     
  8. +Sten+

    +Sten+ Активный пользователь

    С нами с:
    27 авг 2007
    Сообщения:
    978
    Симпатии:
    0
    А разве с шаблонами нельзя реализовать это?
    шапка.tpl:
    Код (Text):
    1.  
    2. <html>
    3. <head>
    4. <title>{$title}</title>
    5. <link href="template/templates/main.css" rel="stylesheet" type="text/css" />
    6. {$style}
    7. {$meta}
    8. {$js}
    9. <script language="JavaScript" src="template/templates/menu.js"></script>
    10. </head>
    11. <body>
    модуль.tpl:
    Код (Text):
    1.  
    2. {include
    3.     file="шапка.tpl"
    4.     title="Регистрация"
    5.     js="<script language="JavaScript" src="template/templates/registration.js"></script>"
    6.     style="<link href="template/templates/forms.css" rel="stylesheet" type="text/css" />"
    7. }
    8. //Контент шаблона.
    Смарти невероятно гибок. Я еще не нашел ничего такого, чегобы нельзя было в нём реализовать.
     
  9. Anonymous

    Anonymous Guest

    Я разве где то сказал, что это реализовать нельзя? Я рассказал, чем я руководствовался, не более того.
     
  10. +Sten+

    +Sten+ Активный пользователь

    С нами с:
    27 авг 2007
    Сообщения:
    978
    Симпатии:
    0
    Горбунов Олег
    Просто я понял это как плюсик в сторону чудосистемы в сравнении с шаблонизатором.
    Кстати, ни 1 такого плюсика (преимущества) так и не было озвучено. И мне на ум не приходит ни одного. А преимуществ шаблононизатора - туева хуча и они все очень очевидны.

    Классный холивар :)
     
  11. Anonymous

    Anonymous Guest

    Плюсы небольшие есть в производительности. И кстати, остутствие центрального шаблона, кстати, ближе к идеологии разделения кода и оформления... Но это все не суть.
    Классические подходы вырабатывались умными людьми и немалое время... с опытом все все равно к ним приходят.
     
  12. Clone

    Clone Guest

    И чем это оно ближе?
     
  13. Anonymous

    Anonymous Guest

    Тем что заголовки, JS и прочая - это не оформление :)
    Это же позволяет привязать хэдеры к формируемому документу более удобно :) т.е. обьект может отдавать хоть html, хоть rss, хоть xhtml... не привязываясь к шаблону, и это - правильно. Но это так, мои досужие домыслы. Я как нибудь, напишу про это статью. :)
     
  14. tmanager

    tmanager Активный пользователь

    С нами с:
    12 мар 2008
    Сообщения:
    108
    Симпатии:
    0
    Но ведь Вы сильно привязались к набору блоков. Разве нет?

    Откуда? И означает ли класс Translate, что языковые версии имеют одинаковое меню и одинаковое содержание?

    Если да -- тогда это не лучшее решение. Я считаю более правильным, когда каждая языковая версия имеет своё меню и содержание. Это просто более гармонирует с реальностью: скажем, зачем на туристическом сайте на русском языке рассказывать о России, а на аглийском -- объяснять порядок выезда россиян с детьми за границу?
     
  15. tmanager

    tmanager Активный пользователь

    С нами с:
    12 мар 2008
    Сообщения:
    108
    Симпатии:
    0
    Чтоб называть подход классическим, оный должен просуществовать ну хоть лет 20.
     
  16. Anonymous

    Anonymous Guest

    Вот это кстати, верное измышление. Применимо не только к туристическим фирмам, кстати.
     
  17. tmanager

    tmanager Активный пользователь

    С нами с:
    12 мар 2008
    Сообщения:
    108
    Симпатии:
    0
    Не все случаи сразу удалось предусмотреть. Появлялись форумы, галереи работ, статьи с возможностью поместить коментарий и -- и класс дописывался, сохраняя совместимость.

    Конечно, неплохо бы сейчас сесть и переписать класс page с учётом всего, что подсказывает опыт. Но время, время...

    Я ж сейчас пишу не сайты -- а программы автоматизации офиса на php/MySQL. Много работы. И нет времени отвлекаться на переделку того, что прекрасно работает.
     
  18. Anonymous

    Anonymous Guest

    Почему 20 лет? Не 22 года, не 14 лет?
    Классическим можно считать подход, существующий время, сравнимое с временем существования предмета его применения, т.е. отрасли в данный момент. Но поверьте, технологиям шаблонизации даже в информатике уже больше 20 лет.
     
  19. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    Никто мне не мешает использовать RussianNewsPage и EnglishNewsPage, опять же, какую страницу выбрать разруливаться будет совершенно в другом месте
     
  20. tmanager

    tmanager Активный пользователь

    С нами с:
    12 мар 2008
    Сообщения:
    108
    Симпатии:
    0
    Примерно за 20 лет сменяется поколение специалистов. Если новое покоение подхватило подход -- можно что-то лепетать о классике.

    А отрасли никак не больше 10 лет.

    Термин "шаблонизация" слишком многозначен. Лучше говорить о пресловутом разделении HTML и программирования. Понятней, о чём речь идёт.

    Так вот это самое разделение прошло все стадии, что и любая новая идея. После эйфории -- ща всё поделим нафиг! -- подход занимает своё место среди остальных, которых сгоряча прокляли и объявили устаревшими.

    К примеру, ASP.NET, когда-то учинявший жесткое (правда, с лазейкой в виде ASP-шных тегов в странице дизайна) разделение дизайна и программирования, тихо похоронил эту жётскость, сделав разделение выбором разработчика.
     
  21. tmanager

    tmanager Активный пользователь

    С нами с:
    12 мар 2008
    Сообщения:
    108
    Симпатии:
    0
    На каждую языковую версию свой класс?
    Ааааааааааааааа!
     
  22. Anonymous

    Anonymous Guest

    Я писал. Неправильно разделять "ХТМЛ и программирование". Есть логика приложения, есть логика отображения. Вот их - надо разделять.
     
  23. tmanager

    tmanager Активный пользователь

    С нами с:
    12 мар 2008
    Сообщения:
    108
    Симпатии:
    0
    Не нужно.
     
  24. Clone

    Clone Guest

    Дык а кто ж заголовки в шаблоны smarty пихает? Да и врядли, если контроллер предполагает, что отдаваться будет RSS, то view выдаст HTML...
     
  25. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    Нет, на каждое представление свой класс.
     
Статус темы:
Закрыта.