Sign in

Зарегистрируйтесь, чтобы стать полноправным участником сообщества Masterpro.ws.

Пишем модуль Joomla

За окном прекрасная погода и великолепный вечер; вам только что позвонила ваша подруга и предложила встретиться в кафе... одним словом, все очень хорошо и лучше даже быть не может. Знаете что, давайте потратим этот вечер на разработку и изготовление разнообразных модулей для всеми нами горячо любимой Joomla, а? Полагаю, без возражений? замечательно, у вас действительно задатки настоящего программера.

Пишем свой модуль для Joomla!

Мы сделаем с вами целый ряд модулей. Сделаем, не особо задумываясь над их функционалом и содержанием; напишем то, что первым придет в голову. Главное для нас с вами сегодня - постараться уяснить принцип, на основе которого мы далее уже будем создавать те расширения, которые нам понадобятся для нашего сайта; я постараюсь построить рассказ так, чтобы вы смогли многое уяснить для себя, просто сравнивая различные фрагменты кода и пробуя делать несложные выводы... ок, приступим.

И начнем мы с вами... ну, не со всем известного 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=*********&amp;img=14&amp;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=*********&amp;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, открываем Менеджер расширений и устанавливаем на сайт. Все уже работает, не так ли?

 

Примечание. В этой статье мы с вами создаем модули для Joomla 2.5; под третью Joomla - установочный xml-файл немного иной. Об этом - в следующей статье... разумеется, php, скрипты и HTML неизменны.

 

Отлично. Что бы такое интересное сделать еще? Давайте немного изменим код; 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=*********&amp;img=14&amp;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=*********&amp;img=14" alt="*********" style="border:none;vertical-align:middle;" /></div></noscript>
<?php
}
?>

 

Не забудьте звездочки везде сменить на ваш UIN, и - спасибо за внимание! Модули, описание которых вы только что прочли - в уже "готовом и упакованном" виде можно скачать на форуме, всегда добро пожаловать.

Продолжение следует.

 

Оставить комментарий

Добавьте ваш комментарий