Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Общие вопросы по PHP » Как выводить результаты фильтра используя шаблон tpl просматриваемой категории?

Как выводить результаты фильтра используя шаблон tpl просматриваемой категории?


     02.08.2020    dle, шаблон, tpl, php    Общие вопросы по PHP, Хаки    763

вопрос
Результаты фильтра я вывожу вот в этом шаблоне:

$tpl->load_template('shortstory.tpl');

Т.е найденные публикации используют shortstory.tpl для отображения.
Как сделать так, чтобы вместо shortstory.tpl публикации отображались используя шаблон категорию которой я просматриваю?
К примеру в настройках определенной категории в качестве "Шаблона краткой новости" я указал shortbook.tpl. И если я нахожусь на странице этой категории, фильтр который выводит результаты применял шаблон shortbook вместо shortstory?
А если я нахожусь на главной то shortstory, и так далее с другими категориями.

Ответа пока нет


8 комментариев

TeraMoune
Эксперт

TeraMoune - 2 августа 2020 11:43 -

Откройте файл show.short.php да найдите подключение шаблона и скопируйте условие куда нужно.

Тестовый репозиторий установки плагинов: teramoune

Invokerlover
Юзер

Invokerlover - 2 августа 2020 11:45 -

Пытался сделать таким способом:

if($category_id == 2){
    $tpl->load_template('private.tpl');
} else{
    $tpl->load_template('shortstory.tpl');
}


Но почему-то не сработало. Сейчас попробую полазить в show.short Спасибо!

TeraMoune
Эксперт

TeraMoune - 2 августа 2020 11:50 -

Ну почти, по стандарту там такое условие.

if( $category_id and $cat_info[$category_id]['short_tpl'] != '' ) $tpl->load_template( $cat_info[$category_id]['short_tpl'] . '.tpl' );
else $tpl->load_template( 'shortstory.tpl' );


А если не сработало то похоже в месте использования кода не видна переменная $category_id либо она изменяется или уничтожается, и тогда никакое условие с использованием данной переменной не сработает.

Проверяли хоть что в переменной там где используете условие ?

Тестовый репозиторий установки плагинов: teramoune

Invokerlover
Юзер

Invokerlover - 2 августа 2020 12:07 -

Что-то не хочет срабатывать.

$news_limit = 12;
$sql_result = $db->query("SELECT p.id, p.autor, p.date, p.short_story, p.full_story, p.xfields, p.title, p.category, p.alt_name, p.comm_num, p.allow_comm, p.fixed, p.tags, e.news_read, e.allow_rate, e.rating, e.vote_num, e.votes, e.view_edit, e.editdate, e.editor, e.reason FROM " . PREFIX . "_post p LEFT JOIN " . PREFIX . "_post_extras e ON (p.id=e.news_id) WHERE allow_main='1' AND approve='1' {$where} {$order_by_sql} LIMIT {$now_news},{$news_limit}");
$now_news = $now_news != 0 ? $now_news + $news_limit : 0;
$allow_active_news = true;
$tpl = new dle_template();
$tpl->dir = TEMPLATE_DIR;
if( $category_id and $cat_info[$category_id]['short_tpl'] != '' ) $tpl->load_template( $cat_info[$category_id]['short_tpl'] . '.tpl' );
else $tpl->load_template( 'shortstory.tpl' );
include_once (DLEPlugins::Check(ENGINE_DIR . '/modules/show.custom.php'));
if( !$tpl->result['content'] ) {
	$tpl->load_template('error.tpl');
	$tpl->set('{error}', "Ошибка");
	$tpl->set('{title}', "Ошибка");
	$tpl->compile('content');
	$tpl->clear();
}

TeraMoune
Эксперт

TeraMoune - 2 августа 2020 12:21 -

Invokerlover, Я ответил по поводу того почему не срабатывает. Переменная не доступна, не создана по месту использования. Возможно код находится в функции или в классе функции, в этом случае нужно передавать переменную либо объявлять глобальной чтобы она стала видимой. Либо искать весь код происхождения переменной и всё, что выше вплоть до параметра $_GET['cat'] и переносить там где переменной вроде как нету.

Хотя догадываюсь это ajax обработчик который не имеет данной переменной в принципе. Поэтому там её и нету. И её стоит передавать через js функцию которая отправляет запрос на этот самый обработчик где будет обработано значение в условии.

Тестовый репозиторий установки плагинов: teramoune

Invokerlover
Юзер

Invokerlover - 2 августа 2020 13:03 -

Понял, далёк до этого, буду ковырять интернет, спасибо!

Invokerlover
Юзер

Invokerlover - 2 августа 2020 13:48 -

хотя в документации пишут обратное:
"Список переменных и классов DLE которые вы можете использовать в вашем подключаемом модуле, без дополнительного объявления:"
И в этот список входит $category_id

TeraMoune
Эксперт

TeraMoune - 2 августа 2020 22:36 -

Ajax обработчики не являются подключаемыми модулями. Подключаемый модуль это когда происходит подключение в файлах движка или посредством тега include но к ним не относятся те скрипты куда отправляются ajax запросы когда меняется выборка фильтра.

Тестовый репозиторий установки плагинов: teramoune

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы

 22.11.2014 shakhtarr  Общие вопросы по PHP
наверх