|
Убираем «Подробнее», если нет расширенного текста новости (Slaed 2.1 Lite)
Цитата | Vovich90
Я предлагаю написать урок, чтобы в модуле Новостей, если не имеется расширенного текста, не было кнопки подробнее. |
Что же, давайте разработаем хак под это дело, заодно поучимся искать нужное место в коде.
Итак, у нас есть слово Подробнее.
Можно, конечно, сразу пойти в модуль News и начать его искать там, но иногда бывает, что искомое слово зарезервировано в константах для всей системы сразу или может всплыть в служебных функциях, а так же в шаблонах (темах оформления), поэтому начнем искать от корня сайта.
1. Запускаем полнотекстовый поиск по всем файлам и ищем Подробнее, причем в опциях поиска поставим Учитывать регистр.
Результат поиска таков:
…/admin/language/lang-russian.php
…/modules/News/language/lang-russian.php
Ну в админке сайта нам делать нечего, а вот второй файл - это про нас.
2. Файл modules/News/language/lang-russian.php опять ищем Подробнее с учетом регистра.
Это строка define("_READMORE","Подробнее");
Небольшое лирическое отступление: define - определяет именованную константу, в данном случае используется для перевода служебных слов на сайте на различные языки посредством языковых файлов-помошников.
3. Админка модуля нам сейчас не интересна, поэтому сразу открываем modules/News/index.php и ищем там _READMORE.
Имеем два вхождения: function news и function cat. Первая у нас работает, когда мы находимся на главной модуля, вторая - когда смотрим новости, принадлежащие какой либо категории (по ссылке вида index.php?name=News&op=cat&catid=1).
Примечание: если посмотреть на код внимательно, то видно, что данные набираются в $morelink, а потом уходят в themeindex. Закомментируйте строку $morelink = … , что бы понять за что отвечает эта переменная.
4. Нашли, теперь вопрос: что с ней делать. Предлагаю использовать метод "Длинных единиц", т.е. окружим нашу переменную как показано ниже, так будет более понятно, что нам скрывать, если нет расширенного описания к новости.
Итак было
<td align=\"left\">$story_link<b>"._READMORE."</b></a> | "._PDATE.":
сделаем так
<td align=\"left\">1111 $story_link 22222222 <b> 3333333 "._READMORE." 4444444 </b> 5555555 </a> 66666666 | 7777777777 "._PDATE.":
Обновив главную модуля теперь хорошо видно, что всё "лишнее" находится между единичками и семерками.
Для начала просто разобьем набор переменной $morelink на 3 части: первая - начало таблицы, вторая - ссылка Подробнее, третье, всё, что идет после Подробнее.
Итак было
Код | 1
| $morelink = "<table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td align=\"left\">$story_link<b>"._READMORE."</b></a> | "._PDATE.": $datetime | "._POSTEDBY.": $posted | "._READS.": $counter $m_com <td align=\"right\"><a href=\"index.php?name=News&op=printpage&sid=$s_sid\"><img src=\"images/blocks/Print.gif\" border=\"0\" alt=\""._PRINTER."\" title=\""._PRINTER."\" align=\"center\"></a> <a href=\"index.php?name=News&op=friendsend&sid=$s_sid\"><img src=\"images/blocks/Contact.gif\" border=\"0\" alt=\""._FRIEND."\" title=\""._FRIEND."\" align=\"center\"></a></td></tr></table>"; |
сделаем так
Код | 1 2 3
| $morelink = "<table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td align=\"left\">";
$morelink .= "$story_link<b>"._READMORE."</b></a> | ";
$morelink .= ""._PDATE.": $datetime | "._POSTEDBY.": $posted | "._READS.": $counter $m_com <td align=\"right\"><a href=\"index.php?name=News&op=printpage&sid=$s_sid\"><img src=\"images/blocks/Print.gif\" border=\"0\" alt=\""._PRINTER."\" title=\""._PRINTER."\" align=\"center\"></a> <a href=\"index.php?name=News&op=friendsend&sid=$s_sid\"><img src=\"images/blocks/Contact.gif\" border=\"0\" alt=\""._FRIEND."\" title=\""._FRIEND."\" align=\"center\"></a></td></tr></table>"; |
И теперь повесим условие на вторую часть нашего кода
if ($bodytext != "") {$morelink .= "$story_link<b>"._READMORE."</b></a> | ";}
Т.е. "если Расширенный текст не пуст, то добавить в $morelink ссылку Подробнее".
5. Окончательно код будет выглядеть так
Код | 1 2 3
| $morelink = "<table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td align=\"left\">";
if ($bodytext != "") {$morelink .= "$story_link<b>"._READMORE."</b></a> | ";}
$morelink .= ""._PDATE.": $datetime | "._POSTEDBY.": $posted | "._READS.": $counter $m_com <td align=\"right\"><a href=\"index.php?name=News&op=printpage&sid=$s_sid\"><img src=\"images/blocks/Print.gif\" border=\"0\" alt=\""._PRINTER."\" title=\""._PRINTER."\" align=\"center\"></a> <a href=\"index.php?name=News&op=friendsend&sid=$s_sid\"><img src=\"images/blocks/Contact.gif\" border=\"0\" alt=\""._FRIEND."\" title=\""._FRIEND."\" align=\"center\"></a></td></tr></table>"; |
И в заключение, как узнать, что в условии надо проверять именно $bodytext. Создайте новость, запомните, что писали в заголовке, тексте и расширенном тексте, посмотрите в таблице через phpMyAdmin в какие поля что попало, вот вам и ориентир. Переменная в коде обычно совпадает с названием поля таблицы.
Дата публикации: 01.03.2007 Прочитано: 14239 раз |
|
Комментарии
Serg_pnz | | | | | Дата: 03.05.2007 | Комментарий: 9 |
| | ТЮРЯГА, во-первых я вижу пробел между кавычками у тебя Код | 1
| if ($bodytext != " ") |
А во-вторых в тройке не запрашивается bodytext из таблицы.
Т.е. тебе необходимо немного расширить запрос Код | 1 2
| $result = $db->sql_query("SELECT s.sid, s.catid, s.aid, s.title, s.time, s.hometext, s.comments, s.counter, s.acomm, s.score, s.ratings, c.id, c.title, c.description, c.img FROM ".$prefix."_stories AS s LEFT JOIN ".$prefix."_categories AS c ON (s.catid=c.id) ".$order." LIMIT $offset, $newnum");
|
не забыв добавить переменную строкой ниже Код | 1
| while (list($sid, $catid, $aid, $stitle, $time, $hometext, $comments, $counter, $acomm, $score, $ratings, $cid, $ctitle, $cdescription, $cimg) = $db->sql_fetchrow($result)) { |
Не все кальсоны с оторванными пуговицами - брюки. © Serg_pnz
"...даме водки? Это чистый спирт!" © кот Бегемот | | ТЮРЯГА | | Дата: 28.04.2007 | Комментарий: 8 |
| | Сделал всё как описанно - шаг за шагом, но "Подробнее" так и не убралось :(
Думаю что проблемма с условиемКод | 1
| if ($bodytext != "") {$morelink .= "$story_link<b>"._READMORE."</b></a> | ";} |
для 3.0 Pro изменил так:Код | 1
| if ($bodytext != " ") {$link .= "<a href=\"index.php?name=$module_name&op=article&id=$sid\" title=\"$stitle\"><b>"._READMORE."</b></a> | ";} |
В чём проблемма?
З.Ы.: Спасибо что Вы есть - Молодцы! | | Serg_pnz | | | | | Дата: 22.03.2007 | Комментарий: 7 |
| | ТЮРЯГА, я нафига тут распинаюсь, непонятно?... Открой код и сделай всё по статье. Уж и единичек-двоек-семерок добавил... Не все кальсоны с оторванными пуговицами - брюки. © Serg_pnz
"...даме водки? Это чистый спирт!" © кот Бегемот | | ТЮРЯГА | | Дата: 22.03.2007 | Комментарий: 6 |
| | На 3.0 Pro пойдёт? | | Akart | | Дата: 15.03.2007 | Комментарий: 5 |
| | Проверил, подходит. ТОлько вместо Print.gif надо поставить Topics.gif | | Akart | | Дата: 15.03.2007 | Комментарий: 4 |
| | А для 1.6 этот вариант переделки подойдет? | | AntDima | | Дата: 02.03.2007 | Комментарий: 3 |
| | Serg_pnz, спасибо!
ЗЫ ну почему в 3 про зазенденны комменты? Не удобно же! | | Serg_pnz | | | | | Дата: 01.03.2007 | Комментарий: 2 |
| | Надеюсь не очень запутанно получилось... Не все кальсоны с оторванными пуговицами - брюки. © Serg_pnz
"...даме водки? Это чистый спирт!" © кот Бегемот | | Vovich90 | | Дата: 01.03.2007 | Комментарий: 1 |
| | СПАСИБО! | |
|
|
Всего 19 на 2 страницах по 10 на каждой странице [<<] [ 1 | 2 ] |
|
|
|