Перейти к публикации

Хак: Автоматический вывод списка ID подкатегорий


Рекомендованные сообщения

Данный хак будет полезен тем, кто часто добавляет новые подкатегории или просто вы ленивая жопа устали каждый раз перебирать файлы шаблона в поисках всех custom-ов и [category для добавления нового ID.

С помощью этого хака достаточно будет прописать:

[category={subcat=3}]
{custom category="{subcat=7}"}
[catlist={subcat=2}]

В момент загрузки файла шаблона хак выполнит обработку тега, в итоге обработчик получит привычный вид:

[category=3,21,22,25,29,33,34,35,39]
{custom category="7,59,60,61,66,67,68,69,80"}
[catlist=2,8,9,10]

Так же можно комбинировать теги:

[category={subcat=3},100,105-110]
[category={subcat=3},{subcat=7},551]


Установка:
Для DLE 13.0 достаточно установить плагин:

<?xml version="1.0" encoding="utf-8"?>
<dleplugin>
    <name>Обработка тега {subcat=x}</name>
    <description>Автоматический вывод списка ID подкатегорий заданной &quot;x&quot; категории</description>
    <icon></icon>
    <version></version>
    <dleversion></dleversion>
    <versioncompare>less</versioncompare>
    <mysqlinstall><![CDATA[]]></mysqlinstall>
    <mysqlupgrade><![CDATA[]]></mysqlupgrade>
    <mysqlenable><![CDATA[]]></mysqlenable>
    <mysqldisable><![CDATA[]]></mysqldisable>
    <mysqldelete><![CDATA[]]></mysqldelete>
    <file name="engine/classes/templates.class.php">
        <operation action="before">
            <searchcode><![CDATA[function load_template($tpl_name) {]]></searchcode>
            <replacecode><![CDATA[//////////////////////////////////////////////////////////////
    private function getSubCatList($match)
    {
        global $cat_info;
        $id = is_array($match) ? $match[1] : $match;

        if (!$cat_info[$id]) {
            return $id;
        }
        $list = [$id];
        foreach ($cat_info as $v) {
            if ($v['parentid'] == $id) {
                $list[] = $this->getSubCatList($v['id']);
            }
        }
        return join(',', $list);
    }
//////////////////////////////////////////////////////////////]]></replacecode>
        </operation>
        <operation action="after">
            <searchcode><![CDATA[$this->template = file_get_contents( $this->dir . "/" . $tpl_name );]]></searchcode>
            <replacecode><![CDATA[//////////////////////////////////////////////////////////////////////////////////////////////
        $this->template = preg_replace_callback("#\{subcat=(\d+)\}#i", [&$this, 'getSubCatList'], $this->template);
//////////////////////////////////////////////////////////////////////////////////////////////]]></replacecode>
        </operation>
        <operation action="after">
            <searchcode><![CDATA[$template = file_get_contents( $templatefile );]]></searchcode>
            <replacecode><![CDATA[//////////////////////////////////////////////////////////////////////////////////////////////
        $template = preg_replace_callback("#\{subcat=(\d+)\}#i", [&$this, 'getSubCatList'], $template);
//////////////////////////////////////////////////////////////////////////////////////////////]]></replacecode>
        </operation>
    </file>
</dleplugin>

 

Для предыдущих версий инструкция у меня на сайте, если кому будет интересно конечно.

 

С уважением,
Олег Александрович a.k.a. Sander

Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

×
×
  • Создать...