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

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


     10.03.2013    Все вопросы » Шаблоны (TPL)    5428

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

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

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

Ответил: nowheremany


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

19 комментариев

specific
Юзер

specific - 11 марта 2013 10:45 -

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

specific
Юзер

specific - 11 марта 2013 10:57 -

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

shadow6630
Юзер

shadow6630 - 11 марта 2013 11:42 -

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

specific
Юзер

specific - 11 марта 2013 12:42 -

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

shadow6630
Юзер

shadow6630 - 11 марта 2013 12:47 -

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

BR0kEN
Эксперт

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
Юзер

TheImDim - 11 марта 2013 16:51 -

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

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

BR0kEN
Эксперт

BR0kEN - 11 марта 2013 16:55 -

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

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

specific
Юзер

specific - 11 марта 2013 20:26 -

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

specific
Юзер

specific - 11 марта 2013 20:28 -

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


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

BR0kEN
Эксперт

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
Юзер

specific - 11 марта 2013 20:54 -

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

BR0kEN
Эксперт

BR0kEN - 11 марта 2013 21:17 -

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

specific
Юзер

specific - 11 марта 2013 21:19 -

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

specific
Юзер

specific - 11 марта 2013 21:23 -

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

BR0kEN
Эксперт

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
Юзер

specific - 11 марта 2013 21:40 -

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

specific
Юзер

specific - 11 марта 2013 22:17 -

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

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

shmel1985
Юзер

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

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

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

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

наверх