Category-URL для DLE

Category-URL

Category-URL

Как известно, в DLE при построении ссылки на полную новость (ЧПУ 2) и в спидбаре отображается та категория, которая просто идет первой в списке. Этот хак позволяет индивидуально выбирать отдельную категорию для формирования ссылки на полную новость и для отображения в спидбаре.
Данная тема особенно актуальна для киносайтов.
Хочу сразу предупредить, я не проводил тщательного всестороннего тестирования, поэтому если возникнут вопросы или проблемы - пишите в теме у меня на сайте.

Работает он только на страницах админки, при добавлении и редактировании новости. Выглядит он следующим образом:
Category-URL


Вот так будут выглядеть ссылка на новость и выбранные категории:
Category-URL


Установка

Выполнить запрос в БД:
ALTER TABLE  `dle_post` ADD  `category_url` MEDIUMINT( 8 ) NOT NULL DEFAULT  '0' AFTER  `category`;


Открыть файл engine/inc/addnews.php
Найти код:
							 <div class="form-group">
							  <label class="control-label col-md-2">{$lang['addnews_cat']}</label>
							  <div class="col-md-10">
								<select data-placeholder="{$lang['addnews_cat_sel']}" name="category[]" id="category" onchange="onCategoryChange(this)" $category_multiple style="width:100%;max-width:350px;">{$categories_list}</select>
							  </div>
							</div>

После него вставить:
							<div class="form-group">
							  <label class="control-label col-md-2">Основная категория</label>
							  <div class="col-md-10">
								<select data-placeholder="{$lang['addnews_cat_sel']}" name="category_url" class="categoryselect" onchange="onCategoryChange(this)" style="width:350px;">{$categories_list}</select>
							  </div>
							 </div>


Найти строку:
	$category = $_POST['category'];

После нее вставить:
	$category_url = intval( $_POST['category_url'] );


Найти код:
category,

Заменить на
category, category_url,

В этой же строке найти код:
'$category_list',

Заменить на:
'$category_list', '$category_url',



Открыть файл engine/inc/editnews.php
Найти строку:
	$categories_list = CategoryNewsSelection( $cat_list, 0 );

После нее вставить:
	$category_url = CategoryNewsSelection( $row['category_url'], 0 );


Найти код:
							<div class="form-group">
							  <label class="control-label col-md-2">{$lang['edit_cat']}</label>
							  <div class="col-md-10">
								<select data-placeholder="{$lang['addnews_cat_sel']}" name="category[]" id="category" onchange="onCategoryChange(this)" {$category_multiple} style="width:350px;">{$categories_list}</select>
							  </div>
							 </div>

После него вставить:
							<div class="form-group">
							  <label class="control-label col-md-2">Основная категория</label>
							  <div class="col-md-10">
								<select data-placeholder="{$lang['addnews_cat_sel']}" name="category_url" class="categoryselect" onchange="onCategoryChange(this)" style="width:350px;">{$category_url}</select>
							  </div>
							 </div>


Найти строку:
	$category = $_POST['category'];

После нее вставить:
	$category_url = intval( $_POST['category_url'] );


Найти код (2шт):
category='$category_list',

Заменить на:
category='$category_list', category_url='$category_url',



Открыть файл engine/modules/show.full.php
Найти строку:
		$category_id = intval( $row['category'] );

После нее вставить:
		if($row['category_url']) $category_id = $row['category_url'];


Найти строку:
		$category_id = $row['category'];

После нее вставить:
		if($row['category_url']) $category_id = $row['category_url'];



Открыть файлы engine/modules/show.short.php и engine/modules/show.custom.php
Найти строку:
	$row['category'] = intval( $row['category'] );

После нее вставить:
	if($row['category_url']) $row['category'] = $row['category_url'];



Открыть файлы engine/engine.php и engine/modules/functions.php
Найти все:
p.category,

Заменить на:
p.category, p.category_url,



Открыть файл engine/modules/lastcomments.php
Найти код:
" . PREFIX . "_post.category

Заменить на:
" . PREFIX . "_post.category, " . PREFIX . "_post.category_url



Открыть файл engine/classes/comments.class.php
Найти строку:
$row['category'] = intval( $row['category'] );

После нее вставить:
	if($row['category_url']) $row['category'] = $row['category_url'];



Ффух, вот вроде и все.

Версия DLE: 10.2 - 11.0

С уважением,
Олег Александрович a.k.a. Sander
Комментарии: (21)
  1. foto
    Посетитель 30 июня 2016 09:12 #
    А можно как-то массово сделать замен? К примеру у меня есть 15-20 статей которые относятся к категориям "Подвижной состав -> Зарубежный транспорт -> Американские поезда
    Можете подсказать, как для всех статей которые относятся к этим 3-м категориям выбрать в качестве основной "Американские поезда". Думаю многим будет полезно, так как в ручную 450 статей править трудоемко:(
    0
    1. foto
      Администратор 30 июня 2016 09:18 #
      Я так понял у вас и так отмечена только одна категория. Остальное - это ведь просто родительские категории...
      В таком случае в модуле вообще нет необходимости.
      0
  2. foto
    Посетитель 30 июня 2016 10:47 #
    Цитата: Sander
    Я так понял у вас и так отмечена только одна категория. Остальное - это ведь просто родительские категории...
    В таком случае в модуле вообще нет необходимости.

    У меня ссылка формируется по первой категории, а хотелось бы чтобы по последней. Можно так осуществить?
    0
    1. foto
      Администратор 30 июня 2016 10:55 #
      Не отмечайте все категории всех уровней, а только одну нужную подкатегорию, тогда только по ней и будет формироваться адрес.

      PS. С автоматическим заполнением не помогу.
      0
      1. foto
        Посетитель 30 июня 2016 11:07 #
        Ну по сути, модуль может мне помочь?
        0
        1. foto
          Администратор 30 июня 2016 18:07 #
          На этот вопрос можете ответить только вы.
          Если он вам поможет в реализации поставленной вами задаче, то можете его и использовать.
          0
  3. foto
    Посетитель 28 августа 2016 16:46 #
    Здравствуйте, возможно ли сделать точно так же для тега {category}(отдельно выбор для данного тега)?
    Допустим у меня идет 3 категории:
    Игры / RPG / The Witcher 3: Wild Hunt
    Выбрана основная "Игры" и {category-url} выводит на игры.
    А {category} выводит мне полностью "Игры / RPG / The Witcher 3: Wild Hunt", а я хочу чтобы была возможность выбирать для данного тега основную например: чтобы тег {category} мне показывал "The Witcher 3: Wild Hunt"
    0
    1. foto
      Администратор 28 августа 2016 19:35 #
      Я не совсем понял суть вашего вопроса.
      Установите хак, протестируйте, чтобы понять что он из себя представляет. Это не займет у вас много времени.
      0
      1. foto
        Посетитель 28 августа 2016 22:08 #
        Хак установил все работает идеально, но я имел виду можно ли сделать такую же систему и для тега {category}?
        +1
  4. foto
    Посетитель 5 января 2017 09:23 #
    Попробовал на 11.1 установить, работает, в урле все норм выводится, а вот в хлебных крошках все так же. В чем может быть проблема? Или не работает данный хак на 11.1?

    За ранее спасибо.
    +1
    1. foto
      Администратор 5 января 2017 17:03 #
      По идее все должно работать как надо.

      К сожалению, устанавливать хак и проверять, у меня нет желания :(
      0
      1. foto
        Посетитель 7 января 2017 15:31 #
        Публика просит решения проблемы, может все таки желание найдется? :) Классный хак, очень хочется использовать, а тут такая бяка вылезла.
        0
  5. foto
    VIP 7 января 2017 18:19 #
    Цитата: andrej6452
    Попробовал на 11.1 установить, работает, в урле все норм выводится, а вот в хлебных крошках все так же. В чем может быть проблема? Или не работает данный хак на 11.1?

    За ранее спасибо.

    я могу ошибаться, хотя врятли думаю, на память просто пишу, вроде в 11.2 исправили данный косяк, может проще обновится на 11.2, также если учесть там есть полезные обновы...
    0
    1. foto
      Посетитель 7 января 2017 18:39 #
      на 11.2 то же самое
      0
  6. foto
    Посетитель 17 января 2017 16:32 #
    А в последних комментариях, в ссылках все равно отображается урл категории котороя выше стоит по списку, а не ту что мы выбрали основной, как тут исправить? Помогите. За ранее благодарность.
    0
    1. foto
      Администратор 17 января 2017 17:05 #
      Дополнил статью.
      +1
      1. foto
        Посетитель 17 января 2017 18:08 #
        Спасибо за быстрый ответ. Но не помогло, отображается все так же урл которая выше списком(

        Помогите плиз, с меня оплата + relaxed
        0
  7. foto
    Администратор 17 января 2017 21:37 #
    Установил на 11.2, проверил.
    Дополнил инструкцию по установке в файле show.full.php чтобы правильно отображались хлебные крошки.

    andrej6452
    Проверил последние комментарии. Ссылка вставляет как надо.
    Проверьте, сохранились ли изменения в файлах lastcomments.php и comments.class.php
    0
  8. foto
    Посетитель 4 февраля 2017 14:58 #
    Работает с последними фиксами, спасибо!
    0
  9. foto
    VIP 11 февраля 2017 03:59 #
    странно. тоже понадобилось. но чего то не так работает)
    вообщем на 11 линейку делал. всё делал как написано выше, всё сделал. но в итоге кароч ЧПУ срабатывает, сам в урл он правильно отображает ну основной раздел который выбрал. но вот например в основном категории урл отображается основного раздела, а не подраздела как должно на примере, но если переходишь по ссылки, то перекидывает на правильный урл, но изначально получается без подраздела!
    далее в спидбаре пусто увы( то есть выводит основной раздел, а не подразел...
    ссылку в ЛС кинул) ну дабы сюда не кидать...
    0
  10. foto
    VIP 11 февраля 2017 04:13 #
    тут я понял engine/modules/show.full.php
    2 раза нужно вставить после
    $category_id = $row['category'];

    это:
    if($row['category_url']) $category_id = $row['category_url'];


    потому что если 1 раз, то в спидбаре не срабатывает)) я сделал 2 раза и в спидбаре появилось)
    0
Добавить комментарий
  • Логин
  • E-mail
Повторите рисунок:
antibot
© Sander-Development. 2009-2018.
При копировании, ссылка на источник обязательна.