Разделы

[snippet] FirstWord

Накопились у меня несколько сниппетов простеньких, но вполне себе полезных, буду делиться. =)

Сниппет FirstWord делает одну простую вещь, выделяет первое слово в строке жирным. Казалось бы ерунда, но я уже в двух проектах применил, значит это достаточно распространенная задача.

Вот код:

<?php
/**
 * @name FirstWord
 * @descr Выделяет первое слово в строке <strong>жирным</strong>
 * @version 1.0
 * @author Gorbarov Iliya (gorbarov(at)gmail.com)
 */
if (isset($output)) $s = $output;
if (isset ($s)) {
    if (mb_strlen($s) > 3) {
        $start = mb_strpos($s, ' ', 2);
        if (isset($start)) {
            $fw = mb_strcut($s, 0, $start * 2);
            $sw = mb_strcut($s, mb_strlen($fw) * 2, mb_strlen($s) * 2);
            $result = "<strong>$fw</strong>$sw";
        } else {
            $result = "<strong>$s<strong>";
        }
    } else {
        $result = $s;
    }
    /* PHx or normal snippet call*/
    if (isset($output)) {
        return $result;
    } else {
        echo $result;
    }
}
?>


Вот описание:
Применять логичнее всего так:

[[FirstWord?s=`[*pagetitle*]`]]

Если вы хотите использовать его как PHx Modifier, то меняем название на phx:fw (ну чтобы по-короче) и вызываем так:

[*pagetitle:fw*]


На этом, я думаю все =)
Буду рад, если кому-то пригодится.
  • +4
  • 25 ноября 2010, 15:36
  • pitbull

Комментарии (11)

RSS свернуть / развернуть
+2
лучше оформить это как phx-сниппет, вызов в форме
[*pagetitle:firstword*]

как-то приятнее :)
avatar

antonkuzmin

  • 25 ноября 2010, 16:43
+1
А пожалуйста, обновил топик.
avatar

pitbull

  • 25 ноября 2010, 16:53
0
Правда последнее время страдаю неоднозначным отношением к PHx, хоть сам и использую почти везде.
avatar

pitbull

  • 25 ноября 2010, 16:56
0
Я кстати ни разу не использовал phx. Везде получалось обходиться без него…

Что касается сниппета, то в моей копилке тоже есть аналогичный. Частенько использую
avatar

Agel_Nash

  • 25 ноября 2010, 17:53
0
Ну PHx убирает многословность, если можно так сказать. Некоторые вещи красивее выглядят с ним.

Да и как не используете, если вы используете вызовы сниппетов в Ditto, то там есть свой встроенный класс PHx ;)
avatar

pitbull

  • 25 ноября 2010, 18:44
0
Кстати, покажите ваше решение, меня немного озадачила работа со строками, в частности умножение длин строк и позиций на 2, чтобы правильно работало.
avatar

pitbull

  • 25 ноября 2010, 18:46
+3
$pagename=explode(' ',$modx->documentObject['pagetitle']);
return "<i>".$pagename[0]."</i> ".implode(' ',array_slice($pagename,1));

Вот такой вот коротенький код
avatar

Agel_Nash

  • 25 ноября 2010, 23:29
+1
краткость сестра таланта, что уж говорить )))
avatar

pitbull

  • 26 ноября 2010, 12:31
0
а в связи с чем такое отношение?
я разбирался с внутренним устройством phx — впечатление — чрезмерная нагрузка (обилие регулярок), но при этом достаточно надежная работа.
avatar

antonkuzmin

  • 25 ноября 2010, 18:26
0
Ну если не обращать внимания на поедание им плейсхолдеров у некешируемых сниппетов, еще на пару моментов, да вот, к слову, посмотрите по тегу community.modx-cms.ru/tag/PHx/ там почти все собрано, мне кажется.
avatar

pitbull

  • 25 ноября 2010, 18:40
0
так известно, в каких случаях phx ест плейсхолдеры, использовать многократно вложенные phx выражения тоже вряд ли стоит, а проблемы с кешированием я успешно победил
avatar

antonkuzmin

  • 25 ноября 2010, 19:11

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.