Пишем модуль для joomla - группа в контакте

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

 2013-04-21 182208

И так поехали, назовем модуль mod_vkblock, основными файлами которые нам нужны являются(кусок их файла установки):

  <files>
        <filename module="mod_vkblock">mod_vkblock.php  </filename>
        <folder>tmpl</folder>
        <filename>helper.php</filename>
        <filename>index.html</filename>
        <filename>css/index.html</filename>
        <filename>css/css.css</filename>
        <filename>js/mod_vkblock.js</filename>
        <filename>js/index.html</filename>
        <filename>mod_vkblock.xml</filename>
    </files>

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

Первое заходим меняем название фалов установки и запуска модуля на название нашего модуля mod_vkblock, заходим потом в установочный файл и меняем начиная с  <name>mod_login</name> на  <name>mod_vkblock</name> и так шерстим весь файл установки модуля.

Теперь замените все что в   <files>  </files> на тот код который написан выше, конечно нам понадобятся не все файлы но так вы уже поймете что лучше сразу закладывать в модули чтобы потом было легче из расширять. Заходим в главный фал модуля mod_vkblock.php вот его код который должен у нас получится:

<?php
    defined('_JEXEC') or die; // no direct access allowed
    require_once dirname(__FILE__) . DS . 'helper.php';
    $class_sfx = htmlspecialchars($params->get('class_sfx'));
    $doc = & JFactory::getDocument();
    $doc->addStylesheet(JURI::root(true) . "/modules/mod_vkblock/css/css.css");
    $doc->addCustomTag('<script src="//vk.com/js/api/openapi.js?92"></script>');
    $html = vkblockHelper::getModul($params);
    require JModuleHelper::getLayoutPath('mod_vkblock');
?>

 Рассмотрим что мы тут делаем, первое это подключаем суффикс модуля он понадобится для дальнейшей верстки отображения модуля, $doc->addStylesheet подключит наши стили css, $doc->addCustomTag добавит нужные теги которые мы возьмем на странице социальной сети в контакте, по сути это подключение api, сразу скажу для критиков, что знаю и о других способах, но под рукой именно этот. Опять заменяем везде упоминания старого модуля на наше название. Внимательно смотрим на строку $html = vkblockHelper::getModul($params);  убираем название запускаемого хелпера на наше.

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

 <?php
    defined('_JEXEC') or die;
    class vkblockHelper {
        function getModul($params) {
        }
    }
?>

Переходм к самому главному отчего все начаналось и чем закончится, вконтакте дает такой код для размещения на сайте:

<!-- VK Widget -->
<div id="vk_groups"></div>
<script type="text/javascript">
VK.Widgets.Group("vk_groups", {mode: 0, width: "200", height: "290"}, 20003922);
</script>

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

  <fieldset name="basic">
                <field
                    name="idgroupvk"
                    type="text"
                    default="39207120"
                    label="id группы"
                    description="" />
                
                <field
                    name="width"
                    type="text"
                    default="270"
                    label="width"
                    description="ширина блока" />
                <field
                    name="height"
                    type="text"
                    default="290"
                    label="height"
                    description="высота блока" />
                <field
                    name="color1"
                    type="text"
                    default="FFFFFF"
                    label="цвет текста на шапке и в подвале"
                    description="" />    

                <field
                    name="color2"
                    type="text"
                    default="000000"
                    label="цвет жирного текста"
                    description="" />
                
                <field
                    name="color3"
                    type="text"
                    default="ED008C"
                    label="цвет фона шапки и подвала"
                    description="класс колонки" />        
    
            </fieldset>

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

<?php
defined('_JEXEC') or die;
//echo $html;
?>
<div id="vkFrend">
    <div  id="vkFrend<?=$params->get('idgroupvk');?>"></div>
    <script type="text/javascript">
        VK.Widgets.Group("vkFrend<?=$params->get('idgroupvk');?>", {mode: 0, wide: 0, width: "<?=$params->get('width');?>", height: "<?=$params->get('height');?>", color1: '<?=$params->get('color1');?>', color2: '<?=$params->get('color2');?>', color3: '<?=$params->get('color3');?>'}, <?=$params->get('idgroupvk');?>);
    </script>
</div>

 Такие вставки как эта <?=$params->get('idgroupvk');?> подставляет в скрип наши значения из настроек модуля, в и тоге мы подключаем модуль сделанный своими руками  меняем размеры, цвета, группы, удачи. А да загоняем все zip архив и устанавливаем.

теги: filename,params,модуля,typetext