Следить за версиями в HostCMS одно удовольствие — постоянно добавляют новые функции, о котором очень хочется рассказать. Кто-то следит за внесенными изменениями, видит растущую мощь системы, применяет на практике, а кто-то нет. Именно для тех, кто не следит за версиями HostCMS и предназначена данная страница. Здесь мы будем объяснять что же такого крутого произошло в новом обновлении.

Обновление 6.8.0β

Закладки

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

Вот как избранное выглядит в HostCMS

закладки избранного пользователей в hostcms

Как закладки выглядят в битриксе

избранный закладки в битриксе

Единственный минус, который я заметил в HostCMS варианте избранного — невозможность добавить конкретную новость, товар, раздел меню в избранное. Добавляется только основной раздел — например только главная страница редактирования определенной информационной системы, интернет-магазина, каждый модуль отдельно. За минус самих закладок это считать не стоит, так давно заведено, что последние версии админки выполняют переход на внутренние элементы через AJAX и по факту ссылок у этих элементов нет.

Лента действий клиента

Теперь в списке клиентов можно нажать на значок «часы» и посмотреть все заказы, комментарии и дела клиента, которые он совершал на сайте в виде временной ленты.

hostcms временная лента действий клиента

А вот и сама кнопка, которая находится напротив представителя компании:

кнопка, открывающая ленту действий клиента в hostcms

Канбан

Если вы еще не знали, то в HostCMS есть прекрасная бесплатная CRM-система, которая уже тесно интегрирована со всем сайтом. Самое крутое из этого обновления для CRM — отображение дел в виде канбана.

Как включить Канбан в HostCMS CRM

При добавлении или изменении дела ему можно присвоить один из статусов:

статусы дел в HostCMS CRM

После того как статусы выбраны — зажимаем кнопку «Канбан» и видим новое отображение дел рассортированное по статусам: Без статуса, В процессе, В процессе, надо ускориться, Завершено успешно, завершено, завершено не успешно, ожидает выполнения, приостановлено.

TPL-шаблоны

В обновлении 6.8.0 добавляется возможность использовать TPL-шаблоны вместе с XSL. Как сказала техподдержка HostCMS — отказываться постепенно от XSL они не собираются, а лишь добавили возможность использовать TPL и его обработчик Smarty.

Что такое TPL-шаблон в HostCMS?

Давайте посмотрим как будет меняться способ написания шаблонов. Например, выведем дату, ссылку, название, картинку и описание информационного элемента на TPL:

{* Показ элементов информационной системы *}
{function name=showItems}
    {foreach $aInformationsystem_Items as $oInformationsystem_Item}
        <dt>
            {$date = strftime($oInformationsystem->format_date, Core_Date::sql2timestamp($oInformationsystem_Item->datetime))}

            {getDate date=$date}
        </dt>

        <dd>
            <a href="{$oInformationsystem_Item->Informationsystem->Structure->getPath()|escape}{$oInformationsystem_Item->getPath()|escape}" hostcms:id="{$oInformationsystem_Item->id}" hostcms:field="name" hostcms:entity="informationsystem_item">
                {$oInformationsystem_Item->name|escape}
            </a>

            {if $oInformationsystem_Item->image_small != ''}
                <a href="{$oInformationsystem_Item->Informationsystem->Structure->getPath()|escape}{$oInformationsystem_Item->getPath()|escape}">
                    <img src="{$oInformationsystem_Item->getItemHref()|escape}{$oInformationsystem_Item->image_small|escape}" class="news_img" alt="" align="left"/>
                </a>
            {/if}

            {if $oInformationsystem_Item->description != ''}
                <div>{$oInformationsystem_Item->description}</div>
            {/if}
        </dd>
    {/foreach}
{/function}

А теперь на привычном XSL:

<xsl:template match="informationsystem_item">
  <dt>
    <xsl:value-of select="substring-before(date, '.')"/>
    <xsl:variable name="month_year" select="substring-after(date, '.')"/>
    <xsl:variable name="month" select="substring-before($month_year, '.')"/>
    <xsl:choose>
      <xsl:when test="$month = 1"> января </xsl:when>
      <xsl:when test="$month = 2"> февраля </xsl:when>
      <xsl:when test="$month = 3"> марта </xsl:when>
      <xsl:when test="$month = 4"> апреля </xsl:when>
      <xsl:when test="$month = 5"> мая </xsl:when>
      <xsl:when test="$month = 6"> июня </xsl:when>
      <xsl:when test="$month = 7"> июля </xsl:when>
      <xsl:when test="$month = 8"> августа </xsl:when>
      <xsl:when test="$month = 9"> сентября </xsl:when>
      <xsl:when test="$month = 10"> октября </xsl:when>
      <xsl:when test="$month = 11"> ноября </xsl:when>
      <xsl:otherwise> декабря </xsl:otherwise>
    </xsl:choose>
    <xsl:value-of select="substring-after($month_year, '.')"/><xsl:text> г.</xsl:text>
  </dt>
  
  <dd>
    <a href="{url}" hostcms:id="{@id}" hostcms:field="name" hostcms:entity="informationsystem_item">
      <xsl:value-of select="name"/>
    </a>
    
    <xsl:if test="image_small!=''">
      <a href="{url}" class="news_title">
        <img src="{dir}{image_small}" class="news_img" alt="" align="left"/>
      </a>
    </xsl:if>
    
    <xsl:if test="description != ''">
      <div><xsl:value-of disable-output-escaping="yes" select="description"/></div>
    </xsl:if>
  </dd>

</xsl:template>

На первый взгляд кажется, что строк у TPL будет меньше при разработке. Однако в XSL идёт обработка даты, а из TPL я её намеренно вырезал, потому что находится она вне приведенного цикла, вот:

{* Функция обработки даты в TPL *}
{function name=getDate date=''}
    {if strlen(date)}
        {$aDate = explode('.', $date)}

        {* Day *}
        {$aDate[0]}

        {* Month *}
        {$month = intval($aDate[1])}
        {switch $month}
            {case 1}
                {#labelMonth1#}
            {/case}
            {case 2}
                {#labelMonth2#}
            {/case}
            {case 3}
                {#labelMonth3#}
            {/case}
            {case 4}
                {#labelMonth4#}
            {/case}
            {case 5}
                {#labelMonth5#}
            {/case}
            {case 6}
                {#labelMonth6#}
            {/case}
            {case 7}
                {#labelMonth7#}
            {/case}
            {case 8}
                {#labelMonth8#}
            {/case}
            {case 9}
                {#labelMonth9#}
            {/case}
            {case 10}
                {#labelMonth10#}
            {/case}
            {case 11}
                {#labelMonth11#}
            {/case}
            {case 12}
                {#labelMonth12#}
            {/case}
        {/switch}

        {* Year *}
        {$aDate[2]}
    {/if}
{/function}

Более того, переменные labelMonth или сущности, как их тут принято называть дополнительно задаются в дополнительной вкладке TPL-шаблона вот так:

вкладка сущностей tpl в hostcms

Я пока сильно не разбирался с TPL шаблонами, но обязательно буду пробовать и сделаю из этого отдельное руководство как накопится знаний. На мой первый беглый взгляд — стоит делать шаблоны на TPL. Я читал, что использование Smarty и TPL может дать немного скорости сайту, что в современном вэбе очень актуально.

Кроме самого введения TPL, поменялось еще и указание XSL и TPL шаблона для контроллера:

// Раньше было только так для XSL
$Shop_Controller_Show
  ->xsl(Core_Entity::factory('Xsl')->getByName('СписокТоваровНаГлавной'))
  ->show();

// Теперь можно и так
$Shop_Controller_Show
  ->xsl('СписокТоваровНаГлавной')
  ->show();

// TPL раньше не было, но способ и для него такой же
$Shop_Controller_Show
  ->tpl(Core_Entity::factory('Tpl')->getByName('СписокТоваровНаГлавной'))
  ->show();

// Для TPL краткая запись тоже работает
$Shop_Controller_Show
  ->tpl('СписокТоваровНаГлавной')
  ->show();

PHP 7.2

Добавлена поддержка PHP 7.2. Я смотрел изменения в версиях PHP 7.0 и 7.2 — не заметил кардинальных изменений по сравнению с переходом от пятой версии, только вот это:

  • новое криптографическое расширение Sodium
  • новые опции в функциях json_encode и json_decode
  • минимальная версия ОС теперь Windows 7
  • ускорение работы за счёт SSA в Opcache и оптимизации in_array().
  • и несколько устаревших функций, например, __autoload, mbstring.func_overload, each() и.т.д.

В целом это круто, с каждой новой версией PHP идёт постепенное улучшение и ускорение — нам это на руку.

Deflate

Модуль «Компрессия страниц» теперь поддерживает Deflate, что позволит выполнять сжатие без потерь.

Поиск по названию XSL и ТДС

Теперь в строке поиска самой админки можно искать XSL-шаблоны и ТДС по названию, вот так:

поиск XSL и ТДС по названию в hostcms

Ну и более мелкие изменения версии 6.8.0

  • у комментариев теперь можно менять ID товара на вкладке Дополнительные
  • у заказа теперь можно указывать другого продавцы при работе, например, от нескольких юридических лиц.
  • у допсвойства типа «Файл» добавлена опция «Сохранять пропорциит».
  • из модуля «Антиспам» теперь можно экспортировать стоп-слова