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

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

Сам на DLE всего пару дней, не пинайте сильно ;)

Думаю, не стоит рассказывать, что у материала (новости, статьи) есть такой атрибут как "Зафиксировать новость". Означает он, что в списке новостей той же категории (или набора категорий) материал будет стоять выше всех. Но у меня задача стояла такая, что материал должен не просто стоять на самом верху, но ещё и как-то выделяться. Увы, движок и шаблонизатор такой стандартной возможности не даёт. Пришлось засучить рукава и полапать код :)

Первым делом было выяснено, что поле fixed, относящееся к материалу и фигурирующее в базе данных, никак, кроме как в сортировке не участвует. То есть, это поле не передаётся в массив данных материала. Это хорошо видно в следующем коде (/engine/engine.php)

$sql_select = "SELECT SQL_CALC_FOUND_ROWS id, autor, date, short_story, SUBSTRING(full_story, 1, 15) as full_story, xfields, title, category, alt_name, comm_num, allow_comm, allow_rate, rating, vote_num, news_read, flag, editdate, editor, reason, view_edit, tags 
FROM " . PREFIX . "_post
WHERE {$stop_list}approve = '1' AND allow_main = '1'".$where_date."
ORDER BY fixed desc, ".$news_sort_by." ".$news_direction_by."
LIMIT ".$cstart.",".$config['news_number'];[/codebox]

Итак, первым делом нужно было заставить движок передавать параметр fixed в массив данных статьи. Просто добавляем к select'у ещё и поле fixed. Запрос теперь выглядит следующим образом (изменения я выделил красным полужирным)

[codebox]$sql_select = "SELECT SQL_CALC_FOUND_ROWS id, autor, date, short_story, SUBSTRING(full_story, 1, 15) as full_story, xfields, title, category, alt_name, comm_num, allow_comm, allow_rate, rating, vote_num, news_read, flag, editdate, editor, reason, view_edit, tags[color="#ff0000"][b], fixed[/b][/color]
FROM " . PREFIX . "_post
WHERE {$stop_list}approve = '1' AND allow_main = '1'".$where_date."
ORDER BY fixed desc, ".$news_sort_by." ".$news_direction_by."
LIMIT ".$cstart.",".$config['news_number'];

Таких запросов в файле /engine/engine.php несколько. Я поленился выяснить, какой именно нужно править, поэтому поправил все :) Увеличения нагрузки не заметите, уверяю.

Теперь в массиве данных для статьи присутствует поле fixed, которое можно "отловить" и использовать в своих целях. Сбором и обработкой данных для построения списка "коротких" новостей занимается файл /engine/modules/show.short.php Его и будем учить работать с fixed. Смотрим в код и изменяем его, как показано

[color="#ff0000"][b]if ($row['fixed']) $tpl->set_block("'\[fixed\](.*?)\[/fixed\]'si","\\1"); else $tpl->set_block("'\\[fixed\\](.*?)\\[/fixed\\]'si","");[/b][/color]

if ($user_group[$member_id['user_group']]['allow_hide']) $tpl->set_block("'\[hide\](.*?)\[/hide\]'si","\\1");
else $tpl->set_block("'\\[hide\\](.*?)\\[/hide\\]'si","<div class=\"quote\">".$lang['news_regus']."</div>");[/codebox]

О чём нам говорит выделенный код? О том, что если новость помечена как "зафиксированная" и мы в шаблоне /templates/ВашШаблон/shortstory.tpl встретим конструкцию типа [fixed]Какой-то HTML-код[/fixed], то этот "Какой-то HTML-код" будет выведен. В качестве кода можно нарисовать цветной слой, например. Или отбивку линейками сверху и снизу (конструкция [fixed][/fixed] может встречаться в шаблоне неоднократно). Короче, чего душа пожелает.

Конечно, при обновлении движка эти изменения потеряются, поэтому при необходимости вносите их вновь ;)

Красноярский автоспорт

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

Итак, первым делом нужно было заставить движок передавать параметр fixed в массив данных статьи. Просто добавляем к select'у ещё и поле fixed. Запрос теперь выглядит следующим образом (изменения я выделил красным полужирным)

Я бы добавил поле fixed перед rating, а не в конец списка.

Ссылка на сообщение
Поделиться на других сайтах
  • 4 месяца спустя...

Можно ли сделать для закрепленной новости отдельный шаблон? помогите очень надо

Изменено пользователем ATHF
Ссылка на сообщение
Поделиться на других сайтах
  • 3 месяца спустя...
  • 11 месяцев спустя...

для 8.3 не канает ! :( другие строки в енгине

Купи лицензию сначала, потом уже глупые посты набивай. Укажи в профиле- сколько тебе лет, что-бы все знали.

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

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

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

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

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

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

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

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

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

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