место в рейтинге
  • 69702
  • 223
  • 36
Нравится блог?
Подписывайтесь!

Zend Framework: создаем блог. Шаг 4

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

 

Мы уже использовали некоторые стандартные хелперы, такие как baseUrl(), headTitle(). Давайте теперь напишем свой. Если взглянуть сейчас на наш блог, то можно заметить, что в списке постов и в отдельных постах, эти самые посты выводятся одинаково, т.е. полностью. Обычно в блогах на главной выводятся анонсы, а уже перейдя по ссылке можно прочитать пост полностью. Такое можно реализовать создав в БД два поля: анонс и полная версия. Затем для вида главной страницы выводить анонс, а для вида отдельно поста полную версию соответственно. Но я считаю ненужным создавать лишнее поле. Вместо этого мы будем использовать специальный тег для ката, эдакий хабракат или ювикат. Если тег указан - пост разделяется.

Для помощников видов в Zend Framework'е существует специальный каталог: application/views/helpers/. Хелперы обычно должны лежать там и соответствовать таким требованиям как:

 

  • Название класса хелпера должно заканчиваться названием хелпера и использовать CamelCase style.
  • Класс хелпера должен наследоваться от Zend_View_Helper_Abstract или реализовывать интерфейс Zend_View_Helper_Interface.
  • Хелпер должен иметь публичный метод, совпадающий с названием хелпера, но первая буква должна быть в нижнем регистре.

 

Давайте напишем наш первый хелпер, который, если существует специальный тег, будет обрезать и оставлять текст до него. Создаем в каталоге application/views/helpers/ файл Preview.php и пишем в него следующее:

 

  1. <?php
  2.  
  3. class Zend_View_Helper_Preview extends Zend_View_Helper_Abstract
  4. {
  5. /**
  6.   * Preview (text before cut)
  7.   *
  8.   * @param string $post Post
  9.   * @return string $preview Preview
  10.   */
  11. public function preview($post)
  12. {
  13. $post = str_replace('<p><!-- cut --></p>', '<!-- cut -->', $post);
  14. $preview = explode('<!-- cut -->', $post);
  15. $preview = $preview[0];
  16.  
  17. return $preview;
  18. }
  19. }

 

Как видно из кода, мы будем юзать тег <!-- cut --> для разделения. Теперь нужно задействовать наш хелпер во вью. Для этого в файле application/views/scripts/index/index.phtml находим строку вывода поста и оборачиваем в наш хелпер. Было:

 

  1. <?php echo $post->blog_post ?>

 

Стало:

 

  1. <?php echo $this->preview($post->blog_post) ?>

 

Как видите наш собственный хелпер вызывается точно также как и стандартные. Теперь все посты на главной выводятся до тега-разделителя. Если перейти по ссылке к отдельному посту, то он уже выведется полностью. Все хорошо, но если посмотреть исходный код, то можно увидеть наш тег-разделитель. В принципе это не так уж и важно, но все же лучше его убрать. Для этого напишем еще один хелпер, который будет искать этот тег и удалять. А вот и он (application/views/helpers/RemoveCutTag.php):

 

  1. <?php
  2.  
  3. class Zend_View_Helper_RemoveCutTag extends Zend_View_Helper_Abstract
  4. {
  5. /**
  6.   * Cut the post's separator
  7.   *
  8.   * @param string $post Post
  9.   * @return string
  10.   */
  11. public function removeCutTag($post)
  12. {
  13. if (!(strpos($post, '<!-- cut -->') === false)) {
  14. $post = str_replace('<p><!-- cut --></p>', '', $post);
  15. $post = str_replace('<!-- cut -->', '', $post);
  16. }
  17.  
  18. return $post;
  19. }
  20. }

 

Теперь также как и в первый раз, задействуем наш хелпер в виде для отдельного поста. Находим строку вывода поста и заменяем на:

 

  1. <?phpecho$this->removeCutTag($this->post['blog_post'])?>

 

Теперь в исходном коде страницы тега-разделителя не будет. Ну вообщем все. Вот так легко можно создавать и использовать свои хелперы. Исходники как всегда можно брать отсюда.

Следующий шаг теперь выйдет не скоро. Дело в том, что я уезжаю на обследование в Оренбург. Буду продолжать курс лечения в МНТК "Микрохирургия глаза". Отсутствовать буду ориентировочно две недели. Так что всем удачи, чао-какао, вообщем увидимся :).

Канат Гайлимов KanatGailimov
Мальчик-красавчик
19 февраля 2011, 14:52
1302

Загрузка...
Loading...

Комментарии

спасибо! все здорово:)
только ты забыл расширение - application/views/helpers/RemoveCutTag.php .Раньше в текстах ката не было. Достал из доков и обновил таблицу в БД.
удачи в Оренбурге!
Спасибо за пожелания :) Только вернулся :)

ЗЫ. Мда, капец я невнимательный, почти в каждом посте недочеты.
круто пишешь, афтар пиши есчо :)
спасибо) пока временно подзабил на ZF, будет время что-нить запощу :)

Оставьте свой комментарий

Спасибо за открытие блога в Yvision.kz! Чтобы убедиться в отсутствии спама, все комментарии новых пользователей проходят премодерацию. Соблюдение правил нашей блог-платформы ускорит ваш переход в категорию надежных пользователей, не нуждающихся в премодерации. Обязательно прочтите наши правила по указанной ссылке: Правила

Также можно нажать Ctrl+Enter

Популярные посты

Инструкция для аллергиков. Как бороться с аллергией в период обострения

Инструкция для аллергиков. Как бороться с аллергией в период обострения

Я аллергик с детства. Имею аллергию на пыльцу березы, липы, полыни (выяснил это благодаря кожным пробам), а также пищевую аллергию на горчицу. Свои проблемы знаю, однако это меня не спасло.
Romeo_17
15 авг. 2017 / 17:21
  • 38791
  • 63
СМИ – ассистент провокаторов? Как гости из соседних стран сеют раздор в Казахстане

СМИ – ассистент провокаторов? Как гости из соседних стран сеют раздор в Казахстане

Инцидент с пьяным киргизским гостем на борту Air Astana, наверное, остался бы только во внутренних сводках авиакомпании, если бы г-н Доган, не поднял громкий крик о государственном языке.
openqazaqstan
17 авг. 2017 / 14:43
  • 11085
  • 174
Казахский национализм раньше выглядел несовременно. Теперь он другой

Казахский национализм раньше выглядел несовременно. Теперь он другой

Националисты стали совсем другими. По-английски хорошо говорят, русскую классику цитируют. Очень современные, образованные, адекватные. А после Крыма в националисты уже чуть ли не любой казах готов был записаться.
Aidan_Karibzhanov
16 авг. 2017 / 16:52
Имеющий уши да услышит. Латиница касается только казахского языка

Имеющий уши да услышит. Латиница касается только казахского языка

Президент Назарбаев наконец-то разъяснил для всех, кто ещё не понял, очевидный вопрос, который всем в Казахстане очевиден. Елбасы повторил: на латиницу мы переводим казахский язык, и это не означает отказ от русского языка.
openqazaqstan
18 авг. 2017 / 16:23
  • 2988
  • 49
«Доехать до Алтын Орды» – как мошенники обманывают алматинцев

«Доехать до Алтын Орды» – как мошенники обманывают алматинцев

Из множества грустных откровений постепенно сложился перечень самых распространённых уловок охотников за нашими деньгами. В нём ожидаемо лидировали профессиональные попрошайки.
caravan_kz
16 авг. 2017 / 15:05
  • 2112
  • 2
В Кокшетау строят два парка для молодёжи. Будут учтены интересы и любителей спорта

В Кокшетау строят два парка для молодёжи. Будут учтены интересы и любителей спорта

Общая площадь парка составляет 25 гектаров. На территории предусмотрено устройство прогулочных дорожек, площадок для установки аттракционов и павильонов различного назначения, цветников.
zhasakmola
17 авг. 2017 / 17:13
  • 1984
  • 1
Недоразумение с грантами в ВУЗы: «медалисты» до сих пор имеют преимущество

Недоразумение с грантами в ВУЗы: «медалисты» до сих пор имеют преимущество

Многие способные выпускники без Алтын Белги готовились к тестированию, чтобы в честной борьбе попытать счастья на гранты без ущемления со стороны якобы "золотых" выпускников.
DanaJarlygapova
14 авг. 2017 / 14:35
Надо научиться видеть скрытые экономические процессы за вспышкой национального гнева

Надо научиться видеть скрытые экономические процессы за вспышкой национального гнева

При полном отсутствии бюджетного жилищного строительства, целые аулы оседают в ветхих домишках, сквозь заборы которых насмешливо возвышаются башни "коктемов", "риц карлтонов" и "есентаев".
niyazov
19 авг. 2017 / 11:16
  • 1843
  • 52
Новый конкурс на грантовое финансирование – разочарование для казахстанских ученых

Новый конкурс на грантовое финансирование – разочарование для казахстанских ученых

Обсуждение новых условий началось ещё давно, но стоит ли ожидать качественного улучшения результатов научно-исследовательской деятельности, если система управления наукой не была модернизирована?
ermekuss
17 авг. 2017 / 12:23
  • 1795
  • 1