Система Совет дня Часть 3Система "Совет дня". Часть 3. В двух предыдущих опытах мы рассмотрели, как организовать таблицы и работу с ними для реализации системы "Совет дня". Сегодня рассмотрим, как предоставить возможность использовать наши советы другим пользователям на своих сайтах. При предоставлении такой возможности, нельзя расчитывать, что у пользователя окажется возможность использовать наши php-скрипты. Безвыходная ситцация? Отнюдь, нет. Каждый разработчик может включить на свои страницы "удаленные" скрипты на языке JavaScript. Т.е. исходный текст js-скрипта может храниться на абсолютно другом сервере. Например, на нашем. В то же время, php дает нам возможность генерировать этот скрипт "на лету". Внешний js-скрипт подключается с помощью следующего тэга: <SCRIPT TYPE="text/javascript" LANGUAGE="JavaScript" Выделенная часть - путь до нашего скрипта. Теперь разберем, как владелец ресурса может поместить наши данные в необходимое ему место? При использовании js-скрипта, это проще всего сделать с помощью функции document.write(). Таким образом, наш js-скрипт должен состоять из набора вызовов этих функций. Начнем конструировать PHP-скрипт для генерации необходимого кода. Для начала возьмем фрагмент кода из предыдущего ( http://webscript.ru///webscript.ru/stories.php?story=21 ) опыта, получающий параметры текущего совета (код установления соединения с базой можно посмотреть в первой части ( http://webscript.ru///webscript.ru/stories.php?story=20 ) этой серии опытов): <?php $sql = "SELECT * FROM tipoad WHERE startdate <= NOW() ORDER BY startdate DESC";$res = mysql_query($sql) or die(mysql_error()); $curTip = mysql_fetch_array($res); ?> Далее мы будем использовать возможности PHP, по "внедрению" HTML-кода. Необходимо заметить, что как HTML-код можно помещать внутри .php3 файлов, так и PHP-код внутри HTML файлов со специальным расширением .phtml (вобще, данные расширения не являются жестко заданными. В принципе, любой администратор может установить их по своему желанию. Подробнее можно посмотреть в опыте ( http://webscript.ru///exper.ural.ru/0058.phtml ), посвященном установке PHP.). Таким образом сразу за закрывающим тэгом ?> помещаем вызовы функции document.write() таким образом: document.write('<DIV CLASS="tipHeader"><?php echo $curTip["title"] ?><DIV>'); Выделенный фрагмент выведет в исходный текст js-скрипта значение атрибута title текущего совета. Таким же образом поступаем с текстом совета, предварительно заменив переводы строк на тэги <BR>. Это необходимо потому, что выводимый текст может занять несколько строк, а разрыв строки в функции document.write() недопустим. Делается это следующей функцией: $s = ereg_replace("rn","<BR>", $curTip["text"]);Про регулярные выражения можно почитать подробнее в опыте ( http://webscript.ru///www.webscript.ru/stories.php3?story=19 ), посвященном описанию работы с ними. Кроме того, мы можем предоставить пользователю возможность описать формат оформления совета на свой вкус (в определенных пределах, конечно). При указании параметров с троке вызова (<SCRIPT TYPE="text/javascript" LANGUAGE="JavaScript" SRC="//..."></SCRIPT>) по правилам, которые используются при передаче параметров значений элементов ввода форм (см. " Передача переменных в скрипт. ( http://webscript.ru///webscript.ru/stories.php?story=16 )"). В скрипте мы организуем проверку на установку этих параметров. Если параметры не установлены, то присвоим им значения по умолчанию. Проверка осуществляется вызовом функции empty(var), которая принимает значение TRUE, если значение переменной не было установлено. Для того, чтобы не загружать опыт лишней информацией, ограничимся заданием цвета заголовка. Но помните, что таким образом можно передать любые параметры. Не только параметры стилей, но и любые другие. if (empty($hColor)) { $hColor = "black";} Задавать этот параметр будем с помощью каскадных таблиц стиля (CSS), вывод которых будем организовывать аналогично (с помощью функции document.write()). Код для этого будет выглядеть так: document.write('<STYLE>');document.write('.tipHeader {'); document.write(' color: <?php echo $hColor ?>;'); document.write('}'); document.write('</STYLE>'); В вызове на сайте пользователя, цвет можно будет задать так: <SCRIPT TYPE="text/javascript" LANGUAGE="JavaScript"SRC="//...?hColor=blue"></SCRIPT> Соберем все вместе (файл extips.php3): <?php if (mysql_connect("localhost", "john", "dark")){ if (!mysql_select_db("test")) { echo "<B>Error selecting db!!!</B>"; exit(); } else { echo "<B>Error connecting!!!</B>"; exit(); } $sql = "SELECT * FROM tipoad WHERE startdate <= NOW() ORDER BY startdate DESC"; $res = mysql_query($sql) or die(mysql_error()); $curTip = mysql_fetch_array($res); if (empty($hColor)) { $hColor = "black"; } $s = ereg_replace("rn","<BR>", $curTip["text"]); ?> document.write('<STYLE>'); document.write('.tipHeader {'); document.write(' color: <?php echo $hColor ?>;'); document.write('}'); document.write('</STYLE>'); document.write('<DIV CLASS="tipHeader"><?php echo $curTip["title"] ?><DIV>'); document.write('<DIV><?php echo $s; ?></DIV>'); Вызов со страницы пользователя будет выглядеть так (предположим, что файл extips.php3 расположен на сервере www.pupkin.ru): <SCRIPT TYPE="text/javascript" LANGUAGE="JavaScript"SRC="//www.pupkin.ru/extips.php3?hColor=blue"></SCRIPT> Таким образом мы создали полнофункциональную систему провайдинга динамического контента для пользователей. На подобных принципах работает рекламная система TX3. Как видите, ничего особенно сложного. Система совет дня: Часть 1 ( http://webscript.ru///webscript.ru/stories.php?story=20 ). Часть 2 ( http://webscript.ru///webscript.ru/stories.php?story=21 ). Часть 3 ( http://webscript.ru///webscript.ru/stories.php?story=22 ). © Андрей Головин( mailto:mine@convex.ru ) //exper.ural.ru/ ( http://webscript.ru///exper.ural.ru/ ) |