Не нравятся результаты поиска? Попробуйте другой поиск!
dle-faq.ru FAQ (все вопросы) Шаблоны (TPL) Убрать ненужное из краткой новости (спойлер, изображение)

Убрать ненужное из краткой новости (спойлер, изображение)


     10.03.2013    Шаблоны (TPL)    3455

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

Я делаю статью, а в начале статьи скриншоты (желательно в спойлере), так вот, мне нужно чтоб при просмотре этой статьи на главной странице (т.е. short story) не отображались скриншоты (спойлер).

Заранее спасибо всем, кто уделит внимание этому вопросу.

Ответил: nowheremany


Используйте {shortstory limit="100000"}

Комментарии пользователей (19)

specific
18 | 16

specific - 11 марта 2013 10:45 - Юзер

Действительно помогло, огромное вам спасибо, только я не понимаю механику, почем при лимите в 100к он убирает картинки и спойлеры, а текст оставляет..

specific
18 | 16

specific - 11 марта 2013 10:57 - Юзер

Хочу обратить, что к сожалению у этого способа есть побочный эффект, в случае если в новости был список, например:
Описание : ---
Год Написания: ---
Мнение Автора ---
То все это превращается в одно целое, например: Описание : ---Год Написания: ---Мнение Автора ---
т.е. не работает автоматический перенос строк.

shadow6630
6

131 | 55

shadow6630 - 11 марта 2013 11:42 - Юзер

Он и не будет работать, при использовании этого тега вырезаются все теги

specific
18 | 16

specific - 11 марта 2013 12:42 - Юзер

Какие могут быть альтерннативы?

shadow6630
6

131 | 55

shadow6630 - 11 марта 2013 12:47 - Юзер

При обрезании тектса в любом случае убирается форматирование (теги), что бы не покрашить шаблон или сам текст, если например обрезание текста попадет на какой-то тег

BR0kEN
163

235 | 275

BR0kEN - 11 марта 2013 15:13 - Эксперт

Открыть /engine/modules/functions.php и в конце, перед ?>, вставить:
function clean($string) {
    $patterns = array('#<!--dle_spoiler-->(.+?)<!--/dle_spoiler--><br />#', '#<!--dle_spoiler (.+?) -->(.+?)<!--/dle_spoiler--><br /><br />#');
    $replace = array('', '');
    $string = preg_replace($patterns, $replace, $string);

    return $string;
}
Затем открыть /engine/modules/show.short.php, найти:
if( isset($view_template) AND $view_template == "rss" ) {
и выше добавить:
$row['short_story'] = clean($row['short_story']);
Таким образом, все спойлеры и весь контент внутри них будет вырезан из краткой новости.

з.ы. Не забыть очистить кэш.

TheImDim
18

327 | 291

TheImDim - 11 марта 2013 16:51 - Юзер

Какой смысл делать переменную $replace массивом? Да и вообще в данном случае можно обойтись без этой переменной. А если придеться искать сотню совпадений с шаблоном.
Разумнее будет так:

$string = preg_replace($patterns, "", $string);

BR0kEN
163

235 | 275

BR0kEN - 11 марта 2013 16:55 - Эксперт

А если нужно будет заменить одно из совпадений?

з.ы. Для автора вопроса, да, лучше ваш вариант.

specific
18 | 16

specific - 11 марта 2013 20:26 - Юзер

Простите, а это куда? можно поподробнее о вашем способе?

specific
18 | 16

specific - 11 марта 2013 20:28 - Юзер

Это я обращаюсь к TheImDim,


з.ы. жаль тут комменты нельзя редактировать, а то ошибаюсь, а потом не исправишь :)

BR0kEN
163

235 | 275

BR0kEN - 11 марта 2013 20:40 - Эксперт

Все расписано здесь: https://dle-faq.ru/faq/tpl/4854-ubrat-nenuzhnoe-iz-kratkoy-novosti-spoyler-izobrazhenie.html#comment-id-12121. Неужели нельзя проявить смекалку?
function clean($string) {
    $patterns = array('#<!--dle_spoiler-->(.+?)<!--/dle_spoiler--><br />#', '#<!--dle_spoiler (.+?) -->(.+?)<!--/dle_spoiler--><br /><br />#');
    $string = preg_replace($patterns, '', $string);

    return $string;
}

specific
18 | 16

specific - 11 марта 2013 20:54 - Юзер

BR0kEN,
Прошу прощения, невнимательно ознакомился с кодом, думаю новичку простительно.
Все сработало, благодарю.
И наверное последний вопрос по этой теме, как этот же эффект применить к shortstory2.tpl?
У меня их 2, т.к. один выводит стандартно краткую новость, а другой выводит окне слайдера только из определенной категории, вот там где окно слайдера спойлер остался.

BR0kEN
163

235 | 275

BR0kEN - 11 марта 2013 21:17 - Эксперт

В слайдере выводите новости при помощи {custom}?

specific
18 | 16

specific - 11 марта 2013 21:19 - Юзер

в main.tpl у меня:
{custom category="1" template="shortstory2" aviable="global" from="0" limit="10" cache="yes"}
а в shortstory2 у меня: {short-story}

specific
18 | 16

specific - 11 марта 2013 21:23 - Юзер

я попробовал в shorstory2.tpl вписать {short-story limit="100000} , и он убрал спойлер, но текст спойлера остался (т.е. саму функцию убрал, а название и содержание спойлера осталось)

BR0kEN
163

235 | 275

BR0kEN - 11 марта 2013 21:29 - Эксперт

Для этого тега совсем другой обработчик. Нужно открыть /engine/modules/show.custom.php, найти:
// Обработка дополнительных полей
и ниже добавить:
if ($custom_template == 'shortstory2') $row['short_story'] = clean($row['short_story']);
shortstory2 - шаблон в котором сработает функция (пропадут спойлеры и их содержимое).

Если нужно несколько шаблонов, то метод такой:
if ($custom_template == 'shortstory2' OR $custom_template == 'shortstory3' OR $custom_template == 'shortstory4') $row['short_story'] = clean($row['short_story']);
и далее по аналогии...

specific
18 | 16

specific - 11 марта 2013 21:40 - Юзер

BR0kEN,
Вы настоящий герой, все сработало, большое вам спасибо :)
Дабы завершить тему, скажите пожалуйста, а по такому же принципу можно удалять и изображения?
В данном случае речь о {custom}
Я просто поступил немного извращенным методом, создав стиль в css где установил размер изображения 0 :)
и применил этот стиль к shortstory2.
Но у этого извращенного метода есть побочный эффект - даже нулевое изображение занимает место, в итак маленьком окне слайдера, как следствие половина окна пустая, а потом только начинается текст.

specific
18 | 16

specific - 11 марта 2013 22:17 - Юзер

Вроде допер, и убрал таким кодом:
if ($custom_template = 'shortstory2') $row['short_story'] = preg_replace( "#<img(.+?)>#is", "", $row['short_story'] );

Но пробелы остались :) к сожалению.

shmel1985
2

146 | 63

shmel1985 - 19 апреля 2013 14:51 - Юзер

После такой манипуляции Используйте {shortstory limit="100000"} вот что получается, я так полагаю что я что то не так делаю но что?

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

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