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 (изменено) Можно ли сделать для закрепленной новости отдельный шаблон? помогите очень надо Изменено 28 января 2009 пользователем ATHF Цитата Ссылка на сообщение Поделиться на других сайтах
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 не канает ! другие строки в енгине Купи лицензию сначала, потом уже глупые посты набивай. Укажи в профиле- сколько тебе лет, что-бы все знали. 2 Цитата Ссылка на сообщение Поделиться на других сайтах
acelote 3 Опубликовано: 18 апреля 2010 Рассказать Опубликовано: 18 апреля 2010 чуваки, вы бы еще подняли тему трехгодичной давности. DVtoxa, есть теги fixed not-fixed читай мануал двига. статья старая. Цитата Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Присоединяйтесь к обсуждению
Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.