Тизер записи через тег

#1 2 сентября 2015 в 14:00
Привет всем.
Недавно возникла ситуация когда нужно выводить заданный тизер в записи, с сохранением форматирования.
Стандартные средства движка этого не позволяют. (В стандарте есть только обрезка текста до заданного количества симоволов + режет форматирование).

Решение:
исспользоавние тега <!--more-->, подобно тому как это сделано в Wordpress.

Контент вывожу следующим образом
  1. <?php echo $fields['content']['handler']->setItem($item)->parseTeaser($item[$fields['content']['name']]); ?>
Где content — название поля.

Функция parseTeaser находится в \instantcms\system\fields\html.php
И после изменения выглядит следующим образом
  1.  
  2. public function parseTeaser($value) {
  3.  
  4. $max_len = $this->getOption('teaser_len');
  5.  
  6. $more = mb_strripos($value, '<!--more-->');
  7.  
  8. if($more) {
  9.  
  10. $value = mb_substr($value, 0, $more);
  11. }
  12. elseif ($max_len){
  13. $url = href_to($this->item['ctype']['name'], $this->item['slug'] . ".html");
  14.  
  15. $value = string_short($value, $max_len);
  16. $value .= '<a class="read-more" href="'.$url.'">'.LANG_MORE.'</a>';
  17. }
  18.  
  19. return $value;
  20. }

На гениальность не претендую.
#2 2 сентября 2015 в 14:44
Сделал немного подругому.
Тег <!--more--> можно писать прямо в тексте.

В файле \instantcms\system\fields\html.php
  1.  
  2. public function parse($value){
  3.  
  4. if ($this->getOption('is_html_filter')){
  5. $value = cmsEventsManager::hook('html_filter', array('text'=>$value, 'is_auto_br'=>false));
  6. }
  7.  
  8. $value = str_replace('&lt;!--more--&gt;', '', $value);
  9.  
  10. return $value;
  11. }
  12.  
  13. public function parseTeaser($value) {
  14.  
  15. $max_len = $this->getOption('teaser_len');
  16.  
  17. $more = mb_strripos($value, '&lt;!--more--&gt;');
  18.  
  19. if($more) {
  20.  
  21. $value = mb_substr($value, 0, $more);
  22. }
  23. elseif ($max_len){
  24.  
  25. $url = href_to($this->item['ctype']['name'], $this->item['slug'] . ".html");
  26.  
  27. $value = string_short($value, $max_len);
  28. $value .= '<a class="read-more" href="'.$url.'">'.LANG_MORE.'</a>';
  29. }
  30.  
  31. return $value;
  32. }
  33.  
  34.  
  35.  
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.