За годы разработки под HostCMS я собрал некоторую коллекцию всяких функций, которые облегчают мне рутинные задачи. И вот решил собрать все это добро в один набор, и поделиться с общественностью.
В наборе две части.
1.
Небольшая библиотека для отладки https://bitbucket.org/JamesKotov/hostcms-6-utils/src/tip/modules/debug/debug.php
Подключается в bootstrap.php и содержит две функции echo_r() и echo_v()
Когда вам нужно посмотреть содержимое любой переменной, например, в коде ТДС, то обычный вывод его с помощью print_r или var_dump выглядит неудобочитаемым, потому что в html лишние пробелы игнорируются, и удобный вывод print_r сливается в одну строчку. Нам поможет тег <pre>...</pre>, но каждый раз писать его руками неудобно )
Поэтому я написал две функции-обертки, которые оборачивают тегом pre вывод функций print_r или var_dump. Это реально очень удобно!
@param string $sMessage сообщение
@param integer $iStatus уровень критичности сообщения от 0 (просто запись) до 4 (критическая ошибка), см /modules/core/log.php
Примеры:
Core_Utils::log('Лытдыбр', 0);
Core_Utils::log('Все в порядке', 1);
Core_Utils::log('Упс :)', 2);
Core_Utils::log('Чо-та я на измену присел', 3);
Core_Utils::log('Ааа! Капец, все пропало!!!', 4);
Core_Utils::getCanonicalUrl()
Вычисляет канонический адрес страницы для link rel="canonical" Тот же метод, что и в теме http://www.hostcms.ru/forums/3/8724/
@param boolean [$useParentShopItem = false] В интернет-магазине, для страниц товаров-модификаций считать каноническим урл родительского товара. По умолчанию выключено.
@param string [$sFirstPageSuffix = 'page-1/'] Суффикс пейджинга на первую страницу, удаляется из урла, чтобы каноническим урлом первой страницы был урл без пейджинга.
@return string
if (!Core_Utils::is503error())
{
// выводим форму входа в личный кабинет
}
else
{
// НЕ выводим форму входа в личный кабинет, пишем "Извините, сейчас залогниться нельзя"
}
Core_Utils::ShowDoc()
Быстрый вывод документа по его id
Core_Utils::getPropertyByTagName()
Возвращает id доп.свойства по названию его xml-тега.
Полезно, например, если у вас на одной ТДС несколько одинаковых магазинов, с одинаковым набором доп.свойств
(у одних и тех же свойств в разным магазинах разные id но одинаковые xml-теги)
Позволяет реализовать для таких случаев универсальную ТДС, не завязываясь на id свойств.
@param integer $iObjectId Идентификатор сущности, к которой относится доп.свойство (инфосистема, магазин, структура, пользователь)
@param string $sPropertyTagName xml-имя доп.свойства
@param string $sObjectType тип сущности, к которой относится доп.свойство. Одно из фиксированного набора значений: 'Informationsystem_Item', 'Informationsystem_Group', 'Shop_Item', 'Shop_Group', 'Structure', 'Siteuser'
@return integer
Пример
//В магазине 1 есть доп.свойство группы, с xml-тегом my_group_property, нужно узнать id этого доп.свойства и получить объект свойства
$oProperty = Core_Utils::getPropertyByTagName($oShop->id, $propertyTagName, $propertyType); // важно, в первом параметре идентификатор именно магазина, а не его группы или товара!
Core_Utils::getPropertyFirstValue()
Быстрое получение первого значения доп.свойства
Core_Utils::prepareRetpath()
Построение урла возврата на текущую страницу.
Используется, когда вам нужно уйти со страницы в какой-то другой процесс (например, авторизация или регистрация) а потом вернуться сюда же.
Урл страницы для возврата передается в параметре retpath
@param string $sRetpath
@return
Core_Utils::goToRetpath()
Редирект на урл возврата
На самом деле, просто быстрый редирект на переданый урл.
Core_Utils::prepareUserDescription()
Подготовка описания инфоэлемента из текста, введенного пользователем
Удаление из него списков и таблиц, интеллектуальная обрезка на заданную длинну с сохранением целых предложений (см ниже), и типографирование
Core_Utils::textSmartCut()
Функция обрезки текста $sText по концам предложений, с сохранением целостности тегов html и удалением лишних тегов и атрибутов. Текст, с учетом окончания предложений, будет гарантированно не длиннее, чем указано в параметре $iLength
За длинну принмается только длинна самого текста, общая суммарна длинна html-тегов и из атрибутов в рассчет не входит.
При этом удаляются запрещенные html-теги, у разрешенных удаляются запрещенные атрибуты.
Список разделителей, определяющих конец предложения настраивается.
Заголовки в тексте по умолчанию не разрешены, и заменяются на абзацы с выделением жирным.
@param string $sText Текст
@param integer $iLength максимальная длинна самого текста (без учета длинны тегов)
@param mixed $aAllowedTags массив тегов, разрешенных в текста
@param mixed $aDisabledAttributes массив запрещенных атрибутов у разрешенных тегов
@param string $sDelim разделители предложений (\s;,.!?:#)
@author James V. Kotov. Based on code from Ilya Lebedev.
@return string
Примеры
// длинна текста 544 символа
$text = 'За годы разработки под HostCMS я собрал некоторую коллекцию всяких функций, которые облегчают мне рутинные задачи. И вот решил собрать все это добро в один набор, и поделиться им с общественностью. Одна из функций возвращает id доп.свойства по названию его xml-тега. Полезно, например, если у вас на одной ТДС несколько одинаковых магазинов, с одинаковым набором доп.свойств (у одних и тех же свойств в разным магазинах разные id но одинаковые xml-теги). Позволяет реализовать для таких случаев универсальную ТДС, не завязываясь на id свойств.';
echo Core_Utils::textSmartCut($text, 250);
// вернет текст в 192 символа
// За годы разработки под HostCMS я собрал некоторую коллекцию всяких функций, которые облегчают мне рутинные задачи. И вот решил собрать все это добро в один набор, и поделиться им с общественностью
echo Core_Utils::textSmartCut($text, 350);
// вернет текст в 260 символов
// За годы разработки под HostCMS я собрал некоторую коллекцию всяких функций, которые облегчают мне рутинные задачи. И вот решил собрать все это добро в один набор, и поделиться им с общественностью. Одна из функций возвращает id доп.свойства по названию его xml-тега
// суммарная длинна с тегами - 592 символа
$text2 = '<h1>За годы разработки под HostCMS</h1> я собрал <b>некоторую коллекцию всяких функций</b>, <span class="myclass">которые облегчают мне рутинные задачи</span>. И вот решил собрать все это добро в один набор, и поделиться им с общественностью. Одна из функций возвращает id доп.свойства по названию его xml-тега.<br/>Полезно, например, если у вас на одной ТДС несколько одинаковых магазинов, с одинаковым набором доп.свойств (у одних и тех же свойств в разным магазинах разные id но одинаковые xml-теги). Позволяет реализовать для таких случаев универсальную ТДС, не завязываясь на id свойств.';
echo Core_Utils::textSmartCut($text2, 250);
// Вернет текст в 192 символа плюс исправленная html-разметка
// <p><b>За годы разработки под HostCMS</b></p> я собрал <b>некоторую коллекцию всяких функций</b>, которые облегчают мне рутинные задачи. И вот решил собрать все это добро в один набор, и поделиться им с общественностью
EugenyP, гениально! Уже лет пять использую эти отладчики, а такая идея мне в голову не пришла! )
(Возможно, потому, что написаны они были еще во времена hostcms v.5)
Утащил к себе, и выложил правку на битбакет
Alegrans, не проще, потому что бывают большие группы пользователей, сидящих под одним IP (например за NAT или через Proxy), а бывают пользователи с динамическими IP адресами, и много чего еще бывает...
Core_Auth::logged() базируется на механизме сессий, а потому надежнее.
Undefined error: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead в файле /var/www/name.com/modules/core/utils.php (строка 639)