Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Хаки » {image-x} для шаблона shortstory

{image-x} для шаблона shortstory


     10.12.2011    image-x, шаблон, shortstory    Все вопросы » Хаки    8932

вопрос
Здравствуйте, хочу вывести новости в несколько колонок и нужно для картинок короткой новости задать background и сделать их ссылкой на полную новость.
Чтобы не править все новости и не добавлять доп поле решил вывести тегом {image-x} и уже для него добавить стили. В show.short.php добавил кусок кода с topnews.php для вывода {image-x}, вообщем тег получилось вывести, но выводит картинку следующей новости. В php ничего не смыслю и делал интуитивно.
Подскажите пожалуйста как реализовать вывод {image-x} в шаблоне shortstory или возможно другой вариант реализации задуманного.

Заранее спасибо.

Ответил: yackers


В show.short.php ищем:
$tpl->compile( 'content' );


Выше Вставляем:
/////////////////Новый парсер картинок////////////////////////////////////
if (stripos ( $tpl->copy_template, "{poster-" ) !== false) {

        $posters = array();
        preg_match_all('/(img|src)=("|\')[^"\'>]+/i', $row['short_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", "http://твой сайт.ру/uploads/blank.gif", $tpl->copy_template );

    }
    ///////////////////////////////////////////////////////////////////////////////////////////////////    


Незабудьте в последнем
$tpl->copy_template
заменить - твой сайт.ру на адрес вашего сайта, и загрузите картинку blank.gif в папку /uploads/ в случае если картинки небыли вставлены в новость он ее отобразит или же проще -

$tpl->copy_template = preg_replace( "#\\{poster-(.+?)\\}#i", "http://твой сайт.ру/uploads/blank.gif", $tpl->copy_template );


Заменить на:
$tpl->copy_template = preg_replace( "#\\{poster-(.+?)\\}#i", "", $tpl->copy_template );


в shortstory.tpl вставляем в нужное место теги

{poster-1}{poster-2}{poster-3}{poster-4}


Тогда ничего отображаться не будет если картинки не были вставлены в short_story

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

kovalenko3331
Юзер

kovalenko3331 - 11 декабря 2011 22:37 -

yackers, Спасибо все работает, то что нужно.

podvyg
Юзер

podvyg - 6 февраля 2012 05:34 -

Превосходный хак. Большущее спасибо. Только у меня возник вопросик, а можно ли сделать хак, что бы выводил первую новость с full story?

yackers
Юзер

yackers - 6 февраля 2012 12:27 -

Поиск по сайту в помощь

http://dle-faq.ru/faq/phpquest/401-otdelnyy-vyvod-kartinki-i-teksta-v-polnoy-novosti-dle.html

NKGroup
Юзер

NKGroup - 24 февраля 2012 15:41 -

yackers спасибо огромное за хак, все работает (DLE 9.5). Но вот возник такой вопрос, а как сделать чтобы теперь в поиске тоже выводилась картинка по тегу {poster-}. Заранее спасибо за помощь :)

NKGroup
Юзер

NKGroup - 24 февраля 2012 16:59 -

Все разобрался сам :)
Найти строчку (примерно 1115 строка):
$tpl->set( '{result-text}', "<div id='news-id-" . $row['id'] . "'>" . $row['story'] . "</div>" );

Выше вставить:

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

        $posters = array();
        preg_match_all('/(img|src)=("|\')[^"\'>]+/i', $row['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", "http://твой сайт.ру/uploads/blank.gif", $tpl->copy_template );

    }
    ///////////////////////////////////////////////////////////////////////////////////////////////////

ravchik
Юзер

ravchik - 23 марта 2012 09:05 -

все работает.. но изображение дублируется.. т.е. выводится и тегом {poster-x} и в самом {short-story}... Как можно убрать изображение из шорт-стори?

kovalenko3331
Юзер

kovalenko3331 - 23 марта 2012 10:01 -

вот ответ _https://dle-faq.ru/faq/phpquest/1279-teg-text-dlya-shablona-short-story.html
Теперь постер выводиш тегом {poster-x} а текст {text limit=x}.

ravchik
Юзер

ravchik - 23 марта 2012 12:35 -

Спасибо! Всё работает!

ravchik
Юзер

ravchik - 23 марта 2012 16:52 -

Что нужно изменить, чтобы рисунок выводился только тегом {poster-x}, а не при помощи <img src="{poster-x}"> ?
При выводе через <img src="{poster-x}">, если нет картинки, то выводится <img src="">, т.е. рисунок как-бы есть, но его нет... noimage ставить нельзя...

rashpil
Эксперт

rashpil - 24 марта 2012 23:33 -

ravchik, Есть же ещё другие теги, на такой случай

Выделяешь блок выводящий картинку (<img...>) следующими тегами:

[image-x][/image-x] и при отсутствии изображения блок полностью будет скрыт

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

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

наверх