Как стать автором
Обновить

Полезные плагины для Smarty

Когда то давно писал эти плагины для своего сайта. Но ему не удалось воплотиться в реальность. Возможно эти плагины пригодятся и вам. Найдут применение не только в Smarty.

1. При нахождении в в тексте определенного тега, происходит вывод текста только до этого тега.


Так как текст на входе может содержать html-теги, то также происходит запись всех тегов в массив, с последующим удалением тех тегов, что не нуждаются в закрытии, либо уже закрытых. Также есть возможность задавать текст ссылки. Может пригодится при выводе новостей, статей и прочего.

<?php
/**
 * Smarty  modifier plugin
 * Function: read more
 * Truncates a string after teg <anchor>habracut</anchor>, optionally taking into account HTML tags.
 *
 * Parameters:
 *     $text - String to shorten.
 *     $ending - What to place at the end, e.g. "...".
 *     $html - Auto-close cut-off HTML tags?
 *
 * Author:
 *     becon,Russia, 2009
 *     
 */
function smarty_modifier_readmore( $text, $url , $ending = 'Read more', $html = true)
 {
        if (!is_string($text) or !is_string($url) or !preg_match("/<cut>/", $text)) {
	return $text;
	} else {
	$text = substr($text,0,strpos($text, '<cut>'));
        if (is_array($ending))
		extract($ending);
        if ($html) {
            $openTags = array();
            preg_match_all("/(<\/?([\w+]+)[^>]*>)?([^<>]*)/", $text, $tags, PREG_SET_ORDER);
            foreach ($tags as $tag) {
                if (!preg_match('/img|br|input|hr|area|base|basefont|col|frame|isindex|link|meta|param/s', $tag[2])
                    and preg_match('/<[\w]+[^>]*>/s', $tag[0]))
                    array_unshift($openTags, $tag[2]);
                elseif (preg_match('/<\/([\w]+)[^>]*>/s', $tag[0], $closeTag)) {
                    $pos = array_search($closeTag[1], $openTags);
                    if ($pos !== false)
                        array_splice($openTags, $pos, 1);
                }
            }
   	 foreach ($openTags as $tag)
        	$text .= '</'.$tag.'>';
     }
        $text .= '<a href='.$url.'class="read_more">'.$ending.'</div>';
	return $text;
  }
}
?>

2.Правильные окончания у множественных форм слов.


К примеру: 3 комментария, 5 комментариев. В интернете существует много вариаций на эту тему, но в то время было интересно это сделать самому.
<?php
/**
 * Smarty  modifier plugin
 *
 * Type:     modifier<br>
 * Example: {$var|plural:'штука':'штуки':'штук'}
 * если $var =1, то выводится штука
 * если $var =2, то выводится штуки
 * если $var =6, то выводится штук
 *  и так для любой числовой переменной и слова(к примеру:литр пива,литра пива,литров пива)
 * вроде подходит и для украинских слов
 * Date:   22 Май , 2009
 * @author   becon 
 * @version  1.0
 * @param string
 * @param string 
 * @return string
 */
function smarty_modifier_plural( $count, $form1, $form2, $form3)
 {
		$count = str_replace (' ', '', $count);
		if ($count > 10 && floor(($count % 100) / 10) == 1) {
			return $form3;
		} else {
			switch ($count % 10) {
				case 1: return $form1;
				case 2:
				case 3:
				case 4: return $form2;
				default: return $form3;
			}
		}
}
?>

Писалось давно, приведено немного в порядок при использовании вместе с Twig.

Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.