Создание Модуля для Joomla 1.5!

Понедельник, 11 Январь 2010

 

В данной статье рассматривается создание модуля для Joomla 1.5!, но эта статья не будет описывать саздание модуля типо "Hellow World" цель ее другая - показать на реальном примере возможности которые заложены модулях Joomla!. Как известно модули вызываются на определенных участках (позициях) страницы и отображают определенный контент в зависимости от их типа, также модули могут входить в состав компонента и использоваться совместно с плагинами, Joomla по умолчанию в комплекте содержит некоторые стандартные модули которые выполняют необходимые функции, такие как отображение пунктов меню, новости, произвольный HTML код и пр.

 

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

 

 

Итак содержимое файла mod_mgm.php имеет такой синтаксис, который запускает модуль всего один раз при запросе к контроллеру Joomla!

 

 
<?php
  defined('_JEXEC') or die('Direct Access to this location is not allowed.');
  // Include the syndicate functions only once
  require(JModuleHelper::getLayoutPath('mod_mgm'));
?>
 

 

В первой строке проверяем наличие установленной константы для препятсвия вызова данного модуля извне, то есть не контроллером Joomla! Теперь опишем содержимое главного файла - шаблона модуля, он в данном примере выполняет все манипуляции с данными. Начну с самого важно - с реализации получения модулей из определенной позиции.

 

Для этой цели используеться обращение к классу JModuleHelper и вызов его метода getModules которому передается всего один параметр - "позиция" модулей, и который вернет массив объектов(модулей) с их параметрами. Далее в цикле каждый объект массива передаем методу renderModule класа JModuleHelper который принимает два параметра - это объект с параметрами модуля и стиль отображения данного модуля. Синтаксис имеет следующий вид:

 

 
<?php
  defined('_JEXEC') or die('Restricted access');
  jimport( 'joomla.application.module.helper' );
  $modules = JModuleHelper::getModules($params->get('modPosition'));
  $count = count($modules);
  $attribs['style'] = 'xhtml';
  for($i=0;$i<$count;$i++){
       echo JModuleHelper::renderModule($modules[$i], $attribs);
  }
?>
 

 

Где в третей строке медоту getModules() праметр "позиция модулей" будет передаваться исходя из значения указанного в настройках администраторской части модуля. Резервирование этих параметров и полей в таблице Базы Данных Joomla под эти параметры осуществляется при инсталляции модуля, а их имя и значение (default) извлекаются из установочного файла XML в нашем случае это файл mod_mgm.xml и его синтаксис имеет такой вид:

 

 
<install type="module" version="1.5.0">
    <name>MGM</name>
    <author>cleverscript.ru</author>
    <version>0.0.1</version>
    <description>Этот модуль позволяет выводить в себе другие модули</description>
    <files>
        <filename module="mod_mgm">mod_mgm.php</filename>
        <filename>index.html</filename>
        <filename>tmpl/default.php</filename>
        <filename>tmpl/index.html</filename>
    </files>
    <params>
      <param name="moduleclass_sfx" type="text" default="" label="Module Class Suffix" description="PARAMMODULECLASSSUFFIX" />
    <param name="@spacer" type="spacer" />
    <param name="modPosition" type="text" default="" label="Позиция модуля" description="Модули этой позиции будут выведены модулем MGM" />
    </params>
</install>
 

 

Обратите внимание на имя параметра для указания позиции модулей и то как в самом модуле извлекается значение этого параметра:

 

$modules = JModuleHelper::getModules($params->get('modPosition'));

 

Осталось еще немного расширить возможности нашего модуля, и дать возможность указывать высоту для HTML каркаса нашего модуля. Делается это следующим образом, формируем HTML каркас в php:

 

 
<?php
$modules = JModuleHelper::getModules($params->get('modPosition'));
$count = count($modules);
$attribs['style'] = 'xhtml';
 
echo <<<HTML
  <div class="main_mgm">
HTML;
      for($i=0;$i<$count;$i++){
        echo JModuleHelper::renderModule($modules[$i], $attribs);   
      }
echo <<<HTML
  </div>
HTML;
 

 

И также формируем CSS правила для стилей класса этого HTML каркасса, следующим образом:

 

 
<?php
  if($params->get('modHeight')){
    $height = $params->get('modHeight');
    $headtag = "<style type='text/css'>
    .main_mgm{
      height:".$height."px;
    }</style>";
  }else{$height = "auto";
    $headtag = "<style type='text/css'>
    .main_mgm{
      height:".$height.";
    }</style>";
  }
?>
 

 

А затем вставляем данный стиль в HEAD документа следующим образом:

 

 
<?php
  $GLOBALS['mainframe']->addCustomHeadTag($headtag);
?>
 

 

Конечный вид шаблона модуля примет такой вид:

 

 
<?php
  if($params->get('modHeight')){
    $height = $params->get('modHeight');
    $headtag = "<style type='text/css'>
    .main_mgm{
      height:".$height."px;
    }</style>";
  }else{$height = "auto";
    $headtag = "<style type='text/css'>
    .main_mgm{
      height:".$height.";
    }</style>";
  }
  $GLOBALS['mainframe']->addCustomHeadTag($headtag);
  $modules = JModuleHelper::getModules($params->get('modPosition'));
  $count = count($modules);
  $attribs['style'] = 'xhtml';
 
  echo <<<HTML
  <div class="main_mgm">
HTML;
      for($i=0;$i<$count;$i++){
        echo JModuleHelper::renderModule($modules[$i], $attribs);   
      }
  echo <<<HTML
  </div>
HTML;
?>
 

 

И еще следует добавить параметр для указания высоты модуля в установочный файл:

 

 
<install type="module" version="1.5.0">
    <name>MGM</name>
    <author>cleverscript.ru</author>
    <version>0.0.1</version>
    <description>Этот модуль позволяет выводить в себе другие модули</description>
    <files>
        <filename module="mod_mgm">mod_mgm.php</filename>
        <filename>index.html</filename>
        <filename>tmpl/default.php</filename>
        <filename>tmpl/index.html</filename>
    </files>
    <params>
      <param name="moduleclass_sfx" type="text" default="" label="Module Class Suffix" description="PARAMMODULECLASSSUFFIX" />
    <param name="@spacer" type="spacer" />
    <param name="modPosition" type="text" default="" label="Позиция модуля" description="Модули этой позиции будут выведены модулем MGM" />
       <param name="@spacer" type="spacer" />
    <param name="modHeight" type="text" default="auto" label="Высота модуля" description="Высота модуля MGM" />
    </params>
</install>
 

 

Данный модуль отобразит все моодули из указанной в его настройках позиции и те из них который включены, а также если доступ у пользователя соответствует его группе.

 

 

Также читайте более подробную статью: Создание MVC модуля для Joomla 1.5!

 

PS. Читайте последние записи RSS Подписка на RSS

 

Метки:

Комментарии 

 
anonim Суббота, 04 Сентябрь 2010

I enjoyed reading your blog. Keep it that way.

 

 
 
anonim Вторник, 01 Март 2011

Вы можете помочь с написанием модуля для вывода данных из таблицы?
Ваши условия.

 

 
 
anonim Четверг, 03 Март 2011

Могу помочь, пишите в Вконтакте или на email support@clevers cript.ru

 

 
 
anonim Вторник, 15 Март 2011

Приветствую всех ценителей Joomla! У меня вопрос-просьба. Взял тему на диплом: "Создание приложения для тестирования студентов", примерно, так...

Вкратце что хотелось бы сделать:
- размещать теор.материал для студентов;
- обучающее тестирование по этому материалу;
- тестирование на оценку (3 попытки, нет возможности вернуть пред. вопрос, лимит по времени).

Я сам кое-какими навыками программировани я на PHP обладаю. Моя проблема в том, что портал кафедры, для которой будет это приложение написан на Joomla 1.5 и мое приложение придется интегрировать с порталом.

И наконец, вопрос: "Как лучше это все сделать? Писать модуль, компонент, еще что-либо. С джумлой не работал. Хотелось бы узнать мнение человека осведомленного )"

За потраченное на меня время отблагодарю.

Вот адрес портала кафедры: http://reis.ustu.ru/

Очень надеюсь на скорый ответ.

с уважением, Сергей Дембицкий
dembitskys@yand ex.ruЭтот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript
8(912)605-33-10

 

 
 
anonim Вторник, 15 Март 2011

Для этого вам нет необходимости писать новый компонент, для публикации материаллов в Joomla достаточно использования стандарного компонента входящего в установочный пакет joomla - com_content.

Просто публикуете материалл и встависаете в него тесты через плагин или модуль, на http://extensions.joomla.org/ подберите модуль для тестов, там должны быть подходящие.

 

 
 
anonim Среда, 16 Март 2011

Здравствуйте! Извините, что не в тему влезаю, но я просто не знаю где искать решение моей проблемы! Так вот, проблема заключается в том, что у меня есть пункт меню с ссылкой на регистрацию, и независимо от того авторизован пользователь или нет, при клики на этот пункт меню всегда выходит форма регистрации. А мне хотелось чтобы когда пользователь уже авторизован, то вместо формы выходило сообщение типа "вы уже зарегистрирован ы". Как это сделать? Подскажите пожалуйста.

 

 
 
anonim Среда, 16 Март 2011

Ваша форма регистрации, чем она выводится на странице? модулем или как?

 

 
 
anonim Среда, 16 Март 2011

Выводится оно у меня так. Я включил модуль авторизации. Снизу там есть такие пунктики как "Забыли пароль. Регистрация". Далее я создал меню и одному из пунктов меню сделал ссылку на тот самый пунктик "Регистрация". Конечно может это не очень рационально, но как смог.

 

 
 
anonim Среда, 16 Март 2011

Попробуйте сделать так: создайте статью и в ней в режиме редактора HTML вставьте такое {loadposition позиция_модуля_ авторизации}, а затем закрепите за вашим пунктом меню эту статью с модулем.

 

 
 
anonim Среда, 16 Март 2011

Но ведь он мне тогда будет выводить полностью модуль авторизации, а мне нужно чтобы выводил только форму для регистрации (в случае неавторизованно го пользователя), ну или сообщение "Вы уже зарегистрирован ы" (в случае авторизованного пользователя).

 

 
 
anonim Среда, 16 Март 2011

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

Второй вариант, если пользователь не зарегистрирован он попадая на эту страницу видит форму авторизации модуля со ссылкой для регистрации, жмет зарегистрироват ся и регистрируется, подтверждает емейл и пр. Далее процидура как в первом варианте.

Почему вам такая логика неподходит?

 

 
 
anonim Среда, 16 Март 2011

В принципе первый вариант не плох и я, честно говоря, не подумал о том что, когда пользователь авторизован, то будет выскакивать только сообщение. Однако сообщение там будет типа "Здравствуйте, 'Логин' ". И получится, что на основной странице это сообщение, и при переходе в пункт меню будет оно же. Поэтому лучше как то по-другому сделать.

Мне так не очень нравится, потому что на моём сайте уже сделано поле для авторизации, которое в глаза бросается. Поэтому мне и не хочется делать так, чтобы на одной странице высвечивалось два модуля авторизации.

А нельзя ли вставить какой-нибудь скриптик для проверки авторизации пользователя в файл, который отвечает за вывод формы регистрации. Мол типа: Если авторизован, то выдавать сообщение; если неавторизован, то выдавать форму. ???

 

 
 
anonim Четверг, 17 Март 2011

ЕЕЕ, я наконец то решил проблему!
С помощью скрипта

{.........}

мне таки удалось сделать то что я хотел!

Большое Вам спасибо за отзывчивость!!!

 

 
 
anonim Пятница, 10 Июнь 2011

А может кто помочь разобраться с таким вот делом? Нужно сделать сайт объявлений. Должны быть регионы, категории + в каждой категории ещё категории(типа куплю, продам, подарю...).Нужно сделать так, чтобы все эти пункты можно было дополнять, удалять и т.д. Есть ли в jooml'e стандартный функционал для этого? Или надо писать компонент? модуль?

 

 
 
anonim Понедельник, 20 Июнь 2011

Есть такой компонент для Joomla : K2

 

 
 
anonim Четверг, 15 Сентябрь 2011

Здравствуйте мне нужно создать компонент или модуль для joomla на мой сайт , кто умеет создавать отпишите мне в с icq 396 209 686
Цену обговорим

 

 
 
anonim Среда, 28 Сентябрь 2011

Опишите подробней какой функционал модуля или компонента вам нужен, возможно уже есть готовые решения, может здесь в теме ктото и предложит такой модуль.

 

 
 
anonim Вторник, 27 Март 2012

Помогите пожалуйста!!!
У меня есть компонент. Как я могу связать его с модулем (что мне написать в нем) чтоб этот компонент(то что он делает) отображалось на каждой странице сайта!?
Я не слишком сильна в этом.

 

 
 
anonim Среда, 28 Март 2012

Arinka, в таких случаях работу отдают тем кто знает как это сделать. можете описать подробней скайп toorr2p3

 

 

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