Скрыть объявление
ВАШИ ПРАВА ОГРАНИЧЕНЫ!

Зарегистрируйтесь на форуме, чтобы стать полноценным участником сообщества!

Вывод кол-ва новостей для категорий + условия

Тема в разделе "Хаки DLE", создана пользователем iCooLER, 6 июл 2017.

06.07.17 в 06:15
10.02.22 в 23:59
20
3.913
5
  1. TopicStarter Overlay
    iCooLER

    iCooLER Кодер

    Сообщения:
    390
    Симпатии:
    245
    Лучших ответов:
    6
    cmCatcount — первый хак для DLE от iCooLER

    Скрипт реализует возможность выводить количество новостей в любой конкретной категории в любом месте на странице.

    Преимущества скрипта:
    — Реализованы условия больше, меньше, равно =<>
    — Получает кол-во новостей для каждой категории одним запросом
    — Подключение в одном месте (т.е. не надо подключать скрипт через include отдельно для каждой категории)
    — Использует кэш (префикс news_)

    Как подключить:
    Файл из архива пихаем в папку /engine/modules/ и в файле main.php перед строкой echo $tpl->result['main']; прописываем include ENGINE_DIR . '/modules/cm.catcount.php';

    Как использовать:
    {catcount:12}
    — выведет кол-во новостей в категории с ID 12
    [catcount:12 > 100] в категории 12 больше 100 новостей [/catcount:12]
    [catcount:12 = 100]
    в категории 12 ровно 100 новостей [/catcount:12]
    [catcount:12 < 100]
    в категории 12 меньше 100 новостей [/catcount:12]

    P.S.
    Скрипт на живом сайте не тестировал!

    PHP:
    function cm_catcount$matches ) {

        global 
    $cat_info_count;
        if ( 
    $matches[2] == '=' ) return ( $cat_info_count[$matches[1]] == $matches[3] ) ? $matches[4] : '' ;
            elseif( 
    $matches[2] == '<' ) return ( $cat_info_count[$matches[1]] < $matches[3] ) ? $matches[4] : '' ;
                elseif( 
    $matches[2] == '>' ) return ( $cat_info_count[$matches[1]] > $matches[3] ) ? $matches[4] : '';
                    else return 
    false;
    }

    if ( !
    $cache dle_cache'news_cm_categories_count'$config['skin'], false ) ) {
        
    $count $db->query("SELECT c.id AS id, (SELECT COUNT(*) FROM " PREFIX "_post AS p WHERE p.category REGEXP '[[:<:]]' + c.id + '[[:>:]]') AS count FROM " PREFIX "_category AS c");
        while ( 
    $row $db->get_array($count) ) $cat_info_count[$row['id']] = $row['count'];
        
    create_cache'news_cm_categories_count'serialize($cat_info_count), $config['skin'], false );
    } else 
    $cat_info_count unserialize($cache);

    foreach (
    $cat_info_count as $id => $count$tpl->result['main'] = str_replace("{catcount:{$id}}"$count$tpl->result['main']);

    $tpl->result['main'] = preg_replace_callback("#\[catcount:([0-9]+)[\s]*?([=<>])[\s]*?([0-9]+)\](.*?)\[\/catcount:[0-9]+\]#is""cm_catcount"$tpl->result['main']);
     

    Вложения:

    • cm_catcount.rar
      Размер файла:
      810 байт
      Просмотров:
      40
    Последнее редактирование: 6 июл 2017
    • Нравится Нравится x 5
    • Полезно Полезно x 1
  2. Frosty

    Frosty Забанен

    Сообщения:
    935
    Симпатии:
    137
    Лучших ответов:
    1
    Опять доп запрос :confused:
     
  3. TopicStarter Overlay
    iCooLER

    iCooLER Кодер

    Сообщения:
    390
    Симпатии:
    245
    Лучших ответов:
    6
    Он кэшируется !
     
  4. Frosty

    Frosty Забанен

    Сообщения:
    935
    Симпатии:
    137
    Лучших ответов:
    1
    Это хорошо) совместно с модулем пунпуна фльтр, можно использовать ?
     
  5. TopicStarter Overlay
    iCooLER

    iCooLER Кодер

    Сообщения:
    390
    Симпатии:
    245
    Лучших ответов:
    6
    Я хз, про какой ты модуль. вообще конфликта быть не должно. сам видишь в хаке все пара десятков строк кода.
     
  6. Frosty

    Frosty Забанен

    Сообщения:
    935
    Симпатии:
    137
    Лучших ответов:
    1
    Про Field Search
     
  7. TopicStarter Overlay
    iCooLER

    iCooLER Кодер

    Сообщения:
    390
    Симпатии:
    245
    Лучших ответов:
    6
    ... каким образом модуль и хак написанные для совершенно разных задач могут конфликтовать?
     
  8. Frosty

    Frosty Забанен

    Сообщения:
    935
    Симпатии:
    137
    Лучших ответов:
    1
    Я писал не про конфликт а про "будет работать или нет"
     
  9. TopicStarter Overlay
    iCooLER

    iCooLER Кодер

    Сообщения:
    390
    Симпатии:
    245
    Лучших ответов:
    6
    Суть одна.
     
  10. Bashmak

    Bashmak PRO Users

    Сообщения:
    642
    Симпатии:
    90
    Лучших ответов:
    1
    Блин где ты был месяца 3 назад? Тогда какие только хаки не перепробовал, все сильно нагружали сервер, но в итоге купил у Sander'а
     
  11. Darkensand

    Darkensand Бывалый

    Сообщения:
    155
    Симпатии:
    12
    Лучших ответов:
    0
    найс но можно было сделать чтоб через конфиг вставляло
     
  12. TopicStarter Overlay
    iCooLER

    iCooLER Кодер

    Сообщения:
    390
    Симпатии:
    245
    Лучших ответов:
    6
    Всмысле?
     
  13. Darkensand

    Darkensand Бывалый

    Сообщения:
    155
    Симпатии:
    12
    Лучших ответов:
    0
    ну чтоб не писать а конфигом делать
     
  14. TopicStarter Overlay
    iCooLER

    iCooLER Кодер

    Сообщения:
    390
    Симпатии:
    245
    Лучших ответов:
    6
    Что «не писать»?
     
  15. Chicago

    Chicago Зелёный

    Сообщения:
    1
    Симпатии:
    0
    Лучших ответов:
    0
    Отличный хак! ;)

    Интересно, а реально сделать так, чтобы можно было выводить подобную конструкцию:
    {catcount:12} материал|а|ов
    {catcount:13} публикаци|я|и|й

    Пробовал через [declination=X] - не пашет...
     
  16. shturval

    shturval PRO Users

    Сообщения:
    99
    Симпатии:
    7
    Лучших ответов:
    1
  17. shturval

    shturval PRO Users

    Сообщения:
    99
    Симпатии:
    7
    Лучших ответов:
    1
    Ребят, где теперь подключить файл в версии 15.1?
    upload_2022-2-10_22-14-56.png

    Такой строки уже не существует.
     
  18. igrovik

    igrovik Местный

    Сообщения:
    1.005
    Симпатии:
    292
    Лучших ответов:
    8
    В старпосте же написано перед echo $tpl->result['main']; так и пробуйте вместо того что идет вместе с eval ставите echo $tpl->result['main']; сохраняете чистите кэш и пробуете. Конечно маловероятно но по идее должно сработать.
     
  19. shturval

    shturval PRO Users

    Сообщения:
    99
    Симпатии:
    7
    Лучших ответов:
    1
    тупанул, да. Нашел на 753 строчке
    PHP:
    echo $tpl->result['main'];
    Вставил выше. Заработало.)
     
  20. igrovik

    igrovik Местный

    Сообщения:
    1.005
    Симпатии:
    292
    Лучших ответов:
    8
    Бывает ))))