TRANSKRAS.RU 0 Опубликовано: 27 августа 2008 Рассказать Опубликовано: 27 августа 2008 Сам на 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] может встречаться в шаблоне неоднократно). Короче, чего душа пожелает. Конечно, при обновлении движка эти изменения потеряются, поэтому при необходимости вносите их вновь Красноярский автоспорт Ссылка на сообщение Поделиться на других сайтах
Akela 9 Опубликовано: 27 августа 2008 Рассказать Опубликовано: 27 августа 2008 Итак, первым делом нужно было заставить движок передавать параметр fixed в массив данных статьи. Просто добавляем к select'у ещё и поле fixed. Запрос теперь выглядит следующим образом (изменения я выделил красным полужирным) Я бы добавил поле fixed перед rating, а не в конец списка. Ссылка на сообщение Поделиться на других сайтах
TRANSKRAS.RU 0 Опубликовано: 28 августа 2008 Рассказать Опубликовано: 28 августа 2008 Автор Исключительно из-за быстродействия SQL или есть ещё какая-то причина? Ссылка на сообщение Поделиться на других сайтах
Akela 9 Опубликовано: 28 августа 2008 Рассказать Опубликовано: 28 августа 2008 Исключительно из-за быстродействия SQL Да. Ссылка на сообщение Поделиться на других сайтах
Jeka009 2 Опубликовано: 2 сентября 2008 Рассказать Опубликовано: 2 сентября 2008 Хотелось бы видеть подобное в следующих релизах Ссылка на сообщение Поделиться на других сайтах
ATHF 33 Опубликовано: 28 января 2009 Рассказать Опубликовано: 28 января 2009 Можно ли сделать для закрепленной новости отдельный шаблон? помогите очень надо Ссылка на сообщение Поделиться на других сайтах
ATHF 33 Опубликовано: 29 января 2009 Рассказать Опубликовано: 29 января 2009 Или как сделать еще один тег [FIXED1] чтобы скрывал текст внутри когда закрепленная новость? Ссылка на сообщение Поделиться на других сайтах
Ladakz 0 Опубликовано: 4 мая 2009 Рассказать Опубликовано: 4 мая 2009 а демо можно увидеть? Ссылка на сообщение Поделиться на других сайтах
DVtoxa 0 Опубликовано: 16 апреля 2010 Рассказать Опубликовано: 16 апреля 2010 для 8.3 не канает ! другие строки в енгине Ссылка на сообщение Поделиться на других сайтах
maks1192 96 Опубликовано: 17 апреля 2010 Рассказать Опубликовано: 17 апреля 2010 для 8.3 не канает ! другие строки в енгине Купи лицензию сначала, потом уже глупые посты набивай. Укажи в профиле- сколько тебе лет, что-бы все знали. Ссылка на сообщение Поделиться на других сайтах
acelote 3 Опубликовано: 18 апреля 2010 Рассказать Опубликовано: 18 апреля 2010 чуваки, вы бы еще подняли тему трехгодичной давности. DVtoxa, есть теги fixed not-fixed читай мануал двига. статья старая. Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Архивировано
Эта тема находится в архиве и закрыта для публикации сообщений.