Мы сделаем с вами целый ряд модулей. Сделаем, не особо задумываясь над их функционалом и содержанием; напишем то, что первым придет в голову. Главное для нас с вами сегодня - постараться уяснить принцип, на основе которого мы далее уже будем создавать те расширения, которые нам понадобятся для нашего сайта; я постараюсь построить рассказ так, чтобы вы смогли многое уяснить для себя, просто сравнивая различные фрагменты кода и пробуя делать несложные выводы... ок, приступим.
И начнем мы с вами... ну, не со всем известного Hello, world! разумеется; это было бы слишком просто. Сделаем для начала модуль, который будет отображать для всех посетителей сайта ваш статус в аське: online или offline.
Собственно, самым простым решением задачки было бы размещение вот этого кода (не забыв заменить звездочки вашим UIN) -
<img src="http://wwp.icq.com/scripts/online.dll?icq=*********&img=N" border="0" />"
- посредством уже готового модуля Joomla, который носит название HTML-модуль (mod_custom). Но - мы не ищем легких путей и сделаем полноценный модуль, инсталлируемый самым обычным для джумлаводов порядком.
Все несложно. Нам с вами необходимо создать два текстовых файла - mod_test_1.php и mod_test_1.xml , содержащие, соответственно, следующие строчки кода:
<?php
// No direct access.
defined('_JEXEC') or die('Restricted access');
?>
<script type="text/javascript">
<!--
document.write('<img src="http://status.icq.com/online.gif?icq=*********&img=14&rnd='+Math.random()+'" style="border:none;vertical-align:middle;" alt="*********" />')
//-->
</script>
<noscript><div style="display:inline"><img src="http://status.icq.com/online.gif?icq=*********&img=14" alt="563506183" style="border:none;vertical-align:middle;" /></div></noscript>
<?xml version="1.0" encoding="utf-8"?>
<install type="module" version="1.0">
<name>mod_test_1</name>
<author>me</author>
<version>1.0</version>
<description>Ваш первый тестовый модуль Joomla!</description>
<files>
<filename module="mod_test_1">mod_test_1.php</filename>
</files>
</install>
Как видите, пых у нас с вами получился совсем коротким; де-факто он не содержит ничего, кроме запрета прямого доступа. Но далее мы чуть усложнили приведенный в самом начале код, устраняя проблему кэширования картинки ICQ браузером, что способно исказить реальное положение вещей.
Впрочем, вы вполне можете использовать и первый вариант кода; не забудьте только экранировать используемые в выводе кавычки. В этом случае все будет выглядеть примерно следующим образом:
<?php
defined('_JEXEC') or die('Restricted access');
echo "<img src=\"http://wwp.icq.com/scripts/online.dll?icq=*********&img=N\" border=\"0\" />";
?>
Пакуем два файла в zip, открываем Менеджер расширений и устанавливаем на сайт. Все уже работает, не так ли?
Отлично. Что бы такое интересное сделать еще? Давайте немного изменим код; c тем, чтобы на страничке с опубликованным модулем посетитель сайта первым делом получал предложение авторизоваться... и сделаем это так, чтобы приглашение невозможно было не заметить - выведем алерт в самом центре экрана. А после авторизации - поприветствуем пользователя по имени и, так сказать, уже менее навязчиво.
Сказано - сделано. Наш php-файл теперь будет выглядеть уже следующим образом:
<?php
defined('_JEXEC') or die('Restricted access');
$user = JFactory::getUser();
if ($user->guest) {
?>
<script>alert('Авторизуйтесь, пожалуйста');</script>
<?php
}
else {
echo "<p>Привет, {$user->username}, последний раз вы были здесь {$user->lastvisitDate}";
}
?>
Взгляните, после запрета прямого доступа мы подключаем класс JFactory, содержащий методы вызова глобальных объектов. Далее объявляем переменную $user и присваиваем ей пользователя; если пользователь Гость - он получает приглашение (в виде алерта в самом центре страницы) авторизоваться, в ином случае (else) выводятся значения двух пользовательских полей, username и lastvisitDate, получаемых из переменной $user. В "готовом" виде результат (уже после авторизации) будет выглядеть примерно так: "Привет, админ, последний раз вы были здесь такого-то числа".
Снова пакуем файлы в zip и снова пробуем на своем сайте. Работает?
Да, а какие вообще свойства пользователя мы с вами сможем извлечь из объекта класса Juser ? Зайдите по ftp в ваш публичный каталог на хостинге и замените на минутку содержимое файла с расширеним .php только что установленного модуля - на следующие строчки. Цикл foreach переберет все пользовательские свойства и выведет на страничку:
<?php
defined('_JEXEC') or die('Restricted access');
$user = JFactory::getUser();
print "\n Текущий пользователь \n";
foreach ($user as $key => $value) {
if (is_string($value)) {
print "<p> Свойство пользователя $key = $value</p>\n";
} else {
print "<p> Нестрочное свойство</p>\n";
}
}
?>
Третий, и последний на сегодня опыт. Давайте как бы совместим первый модуль и второй; сделаем так, чтобы посетитель странички в самом начале получал предложение авторизоваться, и только после авторизации смог увидеть ваш статус в аське. Почему бы и нет? - зачем гостям знать, в аське вы или нет?
Все, опять же, несложно:
<?php
defined('_JEXEC') or die('Restricted access');
$user =& JFactory::getUser();
if ($user->guest) {
?>
<script>alert('Авторизуйтесь, пожалуйста');</script>
<?php
}
else {
?>
<script>
<!--
document.write('<img src="http://status.icq.com/online.gif?icq=*********&img=14&rnd='+Math.random()+'" style="border:none;vertical-align:middle;" alt="*********" />')
//-->
</script>
<noscript><div style="display:inline"><img src="http://status.icq.com/online.gif?icq=*********&img=14" alt="*********" style="border:none;vertical-align:middle;" /></div></noscript>
<?php
}
?>
Не забудьте звездочки везде сменить на ваш UIN, и - спасибо за внимание! Модули, описание которых вы только что прочли - в уже "готовом и упакованном" виде можно скачать на форуме, всегда добро пожаловать.
Продолжение следует.