Page 1 of 1

Работа PHP вставки

Posted: Tue Oct 06, 2009 12:56 pm
by Dominikus
Господа! Не подскажите мне почему у меня не выполняется PHP

Сделал тег пользователя: {rotator}

include ("uploads/rotator/rotator.php");

вставил в страницу а он не выдает мне то, что в обычном PHP все прекрасно работает.

Код rotator.php

";
for($m=0;$m";
?>

в коде list_url.txt:

некий набор ручных ссылок. В идеале хочеться ротатор ссылок на сайте, а ссылки эти внутренние. Т. е. не хочется перегружать страницу. Не знаю данная CMS дает возможность делать страницы не отображая их в меню, но при этом сушествующие. Так вот скрипт берет в случайном порядке ссылки скрытых страниц и выводит на основные страницы по 1-2 шт.
Фу... Вроде как ясно выразился. Если поможете буду очень признателен!!!

Re: Работа PHP вставки

Posted: Tue Oct 06, 2009 2:56 pm
by von-hamster
Скорее всего что-то с путями. Попробуй сделать не include а require - если не найдет - ругнется

Re: Работа PHP вставки

Posted: Tue Oct 06, 2009 4:00 pm
by Dominikus
пробовал вооще ничего, хотя видно что обращяеться к скрипту потому, что и теги подставляет, не беоет данных из list_url.txt

$messages_array = file("list_url.txt");

Re: Работа PHP вставки

Posted: Tue Oct 06, 2009 8:39 pm
by m00nk
Dominikus, лови решение.

1) Создаешь user defined tag с именем rotator и текстом:

Code: Select all

$cnt = $smarty->fetch('globalcontent:'.$params['block']);
$cnt = str_replace('<p>%%</p>', '%%', $cnt);
$cnt = explode('%%', $cnt);
$n =  (isset($params['num']) && intval($params['num'])<=count($cnt)) ? intval($params['num']) : count($cnt);
srand ((double) microtime() * 10000000);
$rk = array_rand($cnt,$n);
if(is_array($rk)) foreach($rk as $k) echo $cnt[$k]; else echo $cnt[0];
2) создаешь global content block с именем my_rotator. В качестве его содержимого вставляешь свои строчки (которые сейчас у тебя в файле list_url.txt. Разделяешь их спец-кодами %%, т.е. текст должен быть примерно таким:

Code: Select all

Первая строчка
%%
Вторая строчка
%%
Третья строчка
3) в том месте страницы или шаблона, где должны быть вставлены эти строки вставляешь тэг {rotator block="my_rotator" num=2}. Параметр num задает количество строчек, которые должны быть выведены. Он не обязателен, если отсутствует - будут выведены все сколько есть.

4) Радуешься жизни. :)

Плюсы:
- не нужно возиться с файлами для смены "контента" - все редактируется в админке через GCB
- не нужно править код при изменении количества "строчек" - скрипт сам определяет это количество
- можно вставлять ротатор в любое место как в шаблонах, так и прямо в текст страниц или в другие блоки GCB
- в качестве контена можно использовать текст, ссылки, картинки, куски HTML, да вообще что угодно
- можно одновременно использовать любое количество разных ротаторов
- ... допишите сами. ;)

Re: Работа PHP вставки

Posted: Tue Oct 06, 2009 9:24 pm
by Dominikus
СПАСИБО!!! Вот это заработало с первого раза. ;)

Я как понимаю в этом месте $cnt = str_replace('%%', '%%', $cnt); ссылка должна заключаться в тег , но при выводе на странице нет её.

Где нужно, если понадобиться вставлять теги в срипте, или в самом шаблоне?

Re: Работа PHP вставки

Posted: Tue Oct 06, 2009 10:47 pm
by m00nk
Я как понимаю в этом месте $cnt = str_replace('%%', '%%', $cnt); ссылка должна заключаться в тег , но при выводе на странице нет её.
Как раз наоборот - здесь убиваются лишние тэги , которые вставляет тиниМСЕ (зависит от его настроек). Они часто все портят, поэтому эта строчка и добавлена.
Где нужно, если понадобиться вставлять теги в срипте, или в самом шаблоне?
Проще всего это сделать в шаблоне - заключаешь тэг внутри . Например так:

Code: Select all

<p>{rotator block="my_rotator" num=2}</p>

Re: Работа PHP вставки

Posted: Wed Oct 07, 2009 2:03 pm
by Dominikus
ок, спасибо! ;)