Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Общие вопросы по PHP » Тег { text } для шаблона short-story

Тег { text } для шаблона short-story


     21.01.2012    краткая новость, хак    Общие вопросы по PHP, Хаки    10548

вопрос
Подскажите как реализовать вывод краткого описания в short-story тегом, подобно как тег { text }? Мне необходимо вывести шаблоне сначала постер новости потом доп поле и затем краткое описание.
Новостей много и не хотелось делать доп поля для постера и описания, и с выводом постера мне уже помог yackers, за что ему еще раз огромное спасибо.
Есть похожая реализация но там вывод текста без форматирования, и еще несколько багов.

Ответил: yackers


В файле show.short.php

Ищем строчку начинающуюся на:
$tpl->set( '{short-story}', stripslashes( "<div id=\"news-id-" 


После этой строчки вставить:
if ( preg_match( "#\\{text limit=['\"](.+?)['\"]\\}#i", $tpl->copy_template, $matches ) ) {
                        $count= intval($matches[1]);

                        $row['short_story'] = str_replace( "</p><p>", " ", $row['short_story'] );
            
                        $row['short_story'] = strip_tags( $row['short_story'], "<br>" );
                        $row['short_story'] = trim(str_replace( "<br>", " ", str_replace( "<br />", " ", str_replace( "\n", " ", str_replace( "\r", "", $row['short_story'] ) ) ) ));
                        if( $count AND dle_strlen( $row['short_story'], $config['charset'] ) > $count ) {
                                
                            $row['short_story'] = dle_substr( $row['short_story'], 0, $count, $config['charset'] );
                                
                            if( ($temp_dmax = dle_strrpos( $row['short_story'], ' ', $config['charset'] )) ) $row['short_story'] = dle_substr( $row['short_story'], 0, $temp_dmax, $config['charset'] );
                            
                        }
            
                        $tpl->set( $matches[0], $row['short_story'] );
            
                    }


Теперь в шаблоне короткой новости будет работать тег {text limit=}

Для fullstory.tpl Редактируем show.full.php

Найти строчку начинающуюся на
$tpl->set( '{full-story}', stripslashes( "<div id=\"news-id-" . $row['id'] .


Ниже этой строчки вставить:
if ( preg_match( "#\\{ftext limit=['\"](.+?)['\"]\\}#i", $tpl->copy_template, $fmatches ) ) {
                        $count= intval($fmatches[1]);

                        $row['full_story'] = str_replace( "</p><p>", " ", $row['full_story'] );
            
                        $row['full_story'] = strip_tags( $row['full_story'], "<br>" );
                        $row['full_story'] = trim(str_replace( "<br>", " ", str_replace( "<br />", " ", str_replace( "\n", " ", str_replace( "\r", "", $row['full_story'] ) ) ) ));
                        if( $count AND dle_strlen( $row['full_story'], $config['charset'] ) > $count ) {
                                
                            $row['full_story'] = dle_substr( $row['full_story'], 0, $count, $config['charset'] );
                                
                            if( ($temp_dmax = dle_strrpos( $row['full_story'], ' ', $config['charset'] )) ) $row['full_story'] = dle_substr( $row['full_story'], 0, $temp_dmax, $config['charset'] );
                            
                        }
            
                        $tpl->set( $fmatches[0], $row['full_story'] );
            
                    }


Все в шаблоне fullstory.tpl работает тег - {ftext limit=""}
Отредактировал 16-06-2012, 19:29 - ПафНутиЙ
Причина: дополнил ответ из комментария

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

kovalenko3331
Юзер

kovalenko3331 - 22 января 2012 11:47 -

Забил добавить, если можно то и для fullstory подскажите как реализовать? Пытался к примеру по аналогии инструкции которую написал yackers, добавить вывод постера тегом в fullstory, но безуспешно.

yackers
Юзер

yackers - 5 февраля 2012 21:32 -

***Комментарий удален***

yackers
Юзер

yackers - 5 февраля 2012 21:38 -

ЗЫ опять не могу вставить в коментарий решение для fullstory - коментарий слишком большой!!!!!!!!!! am

ПафНутиЙ
Админ

ПафНутиЙ - 5 февраля 2012 21:46 -

пишите заново. Сделал ограничение в 10 000 символов, думаю зватит)))

Каков вопрос - таков и ответ. Просто помните об этом.

yackers
Юзер

yackers - 5 февраля 2012 21:52 -

Спасибо работает :)

yackers
Юзер

yackers - 5 февраля 2012 21:52 -

***Комментарий удален***

ПафНутиЙ
Админ

ПафНутиЙ - 6 февраля 2012 07:21 -

добавил в ответ

Каков вопрос - таков и ответ. Просто помните об этом.

kovalenko3331
Юзер

kovalenko3331 - 5 февраля 2012 23:44 -

yackers, раз спасибо тебе за помощь, с текстом все гуд, но сожалению нашел баг в твоем решении _https://dle-faq.ru/faq/questhacks/1004-image-x-dlya-shablona-shortstory.html - выводит постер предыдущей новости, а когда ставлю эти два хака вместе, что в общем то и нужно, то тогда постер вообще не выводит.

yackers
Юзер

yackers - 6 февраля 2012 00:07 -

Значит проверьте еще раз как вы вставили тот хак потому что все должно работать, картинка не может выбираться из другой новости потому что они выдираются из поля short_story и выводятся тегами

kovalenko3331
Юзер

kovalenko3331 - 6 февраля 2012 02:57 -

yackers, еще раз большое человеческое спасибо, все работает. Это я не был внимателен и вставил после $tpl->compile( 'content' ); а не до как нужно было. И что самое обидное что ведь проверял уже его сразу после того как Вы его написали, но тогда не применил, и сейчас решил что тогда не обратил внимания.
В общем друзья все работает 100%, так что если у кого не получается, проверяйте где допустили ошибку.
Кстати по аналогии сделал и {poster-x} для fullstory.tpl.
В show.full.php найти строчку начинающуюся на
$tpl->set( '{full-story}', stripslashes( "<div id=\"news-id-" . $row['id'] .

Ниже этой строчки вставить:
/////////////////Новый парсер картинок////////////////////////////////////
if (stripos ( $tpl->copy_template, "{poster-" ) !== false) {

        $posters = array();
        preg_match_all('/(img|src)=("|\')[^"\'>]+/i', $row['full_story'], $media);
        $dat=preg_replace('/(img|src)("|\'|="|=\')(.*)/i',"$3",$media[0]);

        foreach($dat as $urla) {
            $info = pathinfo($urla);

            if (isset($info['extension'])) {
                $info['extension'] = strtolower($info['extension']);
                if (($info['extension'] == 'jpg') || ($info['extension'] == 'jpeg') || ($info['extension'] == 'gif') || ($info['extension'] == 'png')) array_push($posters, $urla);
            }
        }

        if ( count($posters) ) {
            $c=0;
            foreach($posters as $urla) {
                $c++;
                $tpl->copy_template = str_replace( '{poster-'.$c.'}', $urla, $tpl->copy_template );
            }

        }

        $tpl->copy_template = preg_replace( "#\\{poster-(.+?)\\}#i", "{THEME}/dleimages/no_image.jpg", $tpl->copy_template );

    }
и после вставить хак для текста который двумя комментариями выше написал yackers.

yackers
Юзер

yackers - 6 февраля 2012 04:09 -

Рад что вы разобрались :) и все работает :)

kiosaki
Юзер

kiosaki - 7 апреля 2012 15:47 -

Хм, а у меня напрочь теряется форматирование текста в полной новости. А без этого - дублируется все - постер тот, который я вставил в нужное место и первая картинка в полной новости.
Как сделать, что бы в полной новости убиралась первая картинка-постер?

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

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

наверх