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

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
1248

Загрузка...

Комментарии

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

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

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

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

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

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

Я был удивлён, что в Азербайджане есть Казахский район

Я был удивлён, что в Азербайджане есть Казахский район

Мне как казаху по национальности очень хотелось туда попасть. Оказалось, что климат там намного суровей и люди, говорят, суровые и воинственные. Казах – город на западе Азербайджана...
alidimash
18 янв. 2017 / 21:50
  • 28738
  • 18
10 лучших районов Алматы. Широкие улочки, частные дома, летом – красота!

10 лучших районов Алматы. Широкие улочки, частные дома, летом – красота!

Названия улиц: Садовый бульвар, Солнечный проезд. Красиво звучит не так ли? Прям, как в Москве... Уютные улочки и радующие глаз одноэтажные домики, тихо и свободно, нет динамики, движух и ажиотажа.
gelberdeuet
16 янв. 2017 / 14:45
  • 8196
  • 98
Многочасовые очереди, смерти в ЦОНах: почему вопросы об этом ставят парламентариев в тупик?

Многочасовые очереди, смерти в ЦОНах: почему вопросы об этом ставят парламентариев в тупик?

Ожидали ли депутаты Мажилиса всего этого? Как планировали этот процесс регистрации, и обсуждали ли его, прежде чем одним нажатием кнопки принять нормы с такими абсурдными временными рамками?
openqazaqstan
17 янв. 2017 / 14:32
  • 4922
  • 22
Астана глазами алматинских девушек. Как при таких погодных условиях можно выжить?

Астана глазами алматинских девушек. Как при таких погодных условиях можно выжить?

В спальных районах, и в высотных домах сквозь стены слышно завывание ветра. В особенности ночью. Такие звуки, я слышала, пожалуй, только по телевизору, в фильмах про метель.
Naomi_K
20 янв. 2017 / 12:36
Сильное ДТП произошло в Алматы на Тимирязева-Байзакова

Сильное ДТП произошло в Алматы на Тимирязева-Байзакова

NoComment (c) Официальный слоган EuroNews. Катастрофа на алматинской утренней трассе началась с того, что водители «Ниссана» и микровена ожидали сигнала светофора на запад по Тимирязева...
ibestreporter
17 янв. 2017 / 22:52
  • 3764
  • 5
Вейпинг безопасен? Эндрю Холл из США тоже так считал, пока что-то не пошло не так

Вейпинг безопасен? Эндрю Холл из США тоже так считал, пока что-то не пошло не так

Эндрю Холл из США считал, что вейпинг безопасен и усиленно убеждал в этом близких. Но как-то раз что-то пошло не так. Это результат взрыва хипстерского устройства - выбило 7 зубов + ожоги и раны...
Maxambet
17 янв. 2017 / 16:28
  • 3715
  • 52
Это поколение просрет страну. 20-летняя молодежь представляет из себя сказочных эльфов

Это поколение просрет страну. 20-летняя молодежь представляет из себя сказочных эльфов

Смотря в очередные пустые глаза вчерашнего студента, приходящего устраиваться на первую работу страшно становится. Потому что сравниваю с теми же китайскими студентами, которые готовы выгрызать себе мечту.
mbaitykov
18 янв. 2017 / 11:34
Становится хуже, но как-то постепенно. Беднеем, но тоже как-то не разом

Становится хуже, но как-то постепенно. Беднеем, но тоже как-то не разом

Помню, когда я уезжал и Казахстана, тут было довольно прилично, даже не смотря на то, что жить было невыносимо. Но прилично так. Мусора было меньше. Дороги чистили, вони почти не было. Да и в остальном тоже норм.
shootnix
18 янв. 2017 / 12:49
  • 3337
  • 34
Любимый Тайланд. Правящий король называет Паттайю «черным пятном на репутации страны»

Любимый Тайланд. Правящий король называет Паттайю «черным пятном на репутации страны»

Тайланд мы впервые посетили в декабре 2012 года. Полученные эмоции настолько были яркими, что в конце 2015 года мы решили еще разок слетать в Тайланд. Вспоминая Тай, первое о чем я думаю - горячий...
zhainar_d
17 янв. 2017 / 11:11
  • 3159
  • 24