Расширение функционала тега {custom} для DLE

Расширение функционала тега {custom}

Посетила меня такая мысль, что в теге {custom} очень не хватает возможности выводить новости из просматриваемой категории.
Сейчас для реализации подобного приходится для каждой категории прописывать свой тег:
[category=1]{custom category="1"}[/category]
[category=2]{custom category="2"}[/category]
...


Я же решил это дело немного упростить. Все новости будут выводиться одним тегом с указанным category="current" или category="current_sub"
[aviable=cat|showfull]{custom category="current"}[/aviable]
и
[aviable=cat]{custom category="current_sub"}[/aviable]

current - берет ID одной категории, непосредственно той, в которой находится пользователь.
current_sub - создает список категорий с учетом подкатегорий просматриваемой категории.
aviable необходим, т.к. во всех других случах переменная $category_id будет пустая и мы получим MySQL ошибку.

Установка:
Открыть файл engine/modules/functions.php

Найти строку:
if( preg_match( "#category=['\"](.+?)['\"]#i", $param_str, $match ) ) {

Выше нее вставить:
/////////////////////////////////////////////////////////
	if( preg_match( "#category=['\"]current_?([^'\"]*)['\"]#i", $param_str, $match ) ) {
		$custom_category = (int)$category_id;
		if ($custom_category) {
			$cats_select = true;
			if ($match[1] == 'sub') {
				$custom_category = get_sub_cats($custom_category);
			}
			if( $config['allow_multi_category'] ) {
				$where[] = "category regexp '[[:<:]](" . $custom_category . ")[[:>:]]'";
			} else {
				$custom_category = str_replace( "|", "','", $custom_category );
				$where[] = "category IN ('" . $custom_category . "')";
			}
		}
	} else
/////////////////////////////////////////////////////////


Расширение функционала тега {custom}

PS. В новых версиях DLE добавлен блок custom для комментариев. Он визуально такой же, за исключением подчеркнутого кода.


UPD: от 07.05.2020
Для DLE 13.x - 14.x сделал установку в виде плагина.
Скачать на Github


С уважением,
Олег Александрович a.k.a. Sander
Комментарии: (19)
  1. foto
    VIP 25 ноября 2013 15:15 #
    Хорошее решение!
    P.S. В конце статьи "Источник..." написано два раза.
    +1
  2. foto
    Посетитель 27 ноября 2013 12:30 #
    У него почти в каждом посте источник 2 раза.
    0
  3. foto
    Посетитель 29 ноября 2013 20:40 #
    спасибо за реализацию. Так же уважаемому пафнутию хочу заменить что не хватает данной функции в Block Pro
    +1
  4. foto
    Посетитель 9 января 2014 00:23 #
    Просто отличное решение!!! Вот только.. у меня 1 новость находится в нескольких категориях например - 3,4,8.

    Невозможно ли сделать приписывание посредством Sql запороса о принадлежности новости к категориям. Например $db->query( "SELECT id..категорий. (dle_post > category)

    чтобы передавалось уже в "current" значения через запятую?

    =========================================
    и также заметил, вряд ли это назову Багом - скорее фактом -
    в 2х новостях из той же категории кастом выводит разное количество.
    В одной по 3, в другой по 8.
    0
  5. foto
    VIP 30 сентября 2014 12:37 #
    Я не совсем понял, что к чему тут.
    Допустим у меня в полной новости, похожие новости выведены через шаблон custom.
    {custom category="1,2" template="custom-1" aviable="global" from="0" limit="2" cache="yes" order="rand"}

    Как мне применить это решение в этом случае?
    0
    1. foto
      Администратор 2 октября 2014 23:47 #
      {custom category="current" template="custom-1" from="0" limit="2" cache="yes" order="rand"}
      +1
  6. foto
    VIP 22 января 2015 20:05 #
    Давно хотел спросить.
    При просмотре полной новости, в похожих новостях отображается сама просматриваемая новость и другие из этой же категории.
    Почему так?
    0
    1. foto
      Администратор 24 января 2015 16:42 #
      Для вывода похожих новостей используйте тег {related-news}
      В нем предусмотрено исключение просматриваемой новости.
      {custom} такими возможностями не обладает.
      0
  7. foto
    Посетитель 16 марта 2017 09:58 #
    У меня в dle 11.2 находит:
    if( preg_match( "#category=['\"](.+?)['\"]#i", $param_str, $match ) ) {
    - 2строки.
    и
    $custom_category = $db->safesql( trim(str_replace( ',', '|', $temp_array )) );
    - 4 строки.

    Во всех строках изменять?
    0
    1. foto
      Администратор 16 марта 2017 14:03 #
      Не везде, только в промежутке:
      function custom_print( $matches=array() ) {
      /* тут */
      }
      
      function check_ip($ips) {


      PS. В статью добавил скриншот что нужно получить в итоге.
      +1
  8. foto
    Гость 12 августа 2018 04:31 #
    У меня данный метод не работает с "Custom-Cache by Sander", если ставлю скажем cache="1h", то во всех категориях отображается первый результат кэширования определенной категории. Если не трудно исправьте !
    0
    1. foto
      Администратор 12 августа 2018 09:50 #
      Решение простое, но доступно только группе "Клиенты".
      Внимание! У Вас нет прав для просмотра скрытого текста.

      Если вы приобретали модуль - пишите на email, скину инструкцию.
      0
      1. foto
        Клиент 14 августа 2018 18:07 #
        Заменить на:

        Спасибо, получилось!
        0
      2. foto
        Клиент 31 августа 2018 06:11 #
        Нашел еще баг. Помогите поправить?
        Проблема с навигацией страниц, при нажатии ([next-link]далее[/next-link])

        нажимаем на далее появляется вторая страница/page/2/ с содержанием /page/1/ на которой уже был, т.е результат закеширован, и далее сколько не нажимай все равно в адресной строке /page/2/
        0
        1. foto
          Администратор 31 августа 2018 20:09 #
          Завтра-послезавтра вероятнее всего полностью перепишу инструкцию по установке.
          0
          1. foto
            Клиент 31 августа 2018 20:21 #
            Большое спасибо!
            0
  9. foto
    VIP 7 мая 2020 20:00 #
    а для 14 версии как быть?
    0
    1. foto
      Администратор 7 мая 2020 21:26 #
      Обновил статью.
      +1
  10. foto
    Гость 11 июля 2020 15:20 #
    Приветствую, а если просто использовать такую конструкцию {custom category="{category-id}"}, неправильное решение?
    0
Добавить комментарий

Внимание! Все сообщения касающиеся техподдержки будут удалены или проигнорированы

Attention! All messages asking for technical support will be removed or ignored

  • Логин
  • E-mail (не обязательно)
Повторите рисунок:
antibot
© Sander-Development. 2009-2024.
При копировании, ссылка на источник обязательна.