Мы в социальных сетях: Вконтакте Facebook Одноклассники LiveJournal Twitter Мой Мир

Как правильно класть плитку. Как класть плитку на стену быстро. Класть плитку своими руками. Как выбрать ламинат для квартиры. Какой лучше выбрать ламинат сегодня. Какого цвета выбрать ламинат. Как правильно клеить обои. Как клеить обои на потолок вертикально. Как правильно клеить углы обоями. Интересные самоделки своими руками. Качественные самоделки своими руками фото. Самоделки для дома своими руками. Как сделать потолок в доме. Чем лучше утеплить потолок дома на сегодняшний день. Утепление потолка дома своими руками. Бизнес идеи с минимальными вложениями. Успешные идеи малого бизнеса с нуля. Прибыльные бизнес идеи. Как сделать мебель своими руками. Сделать деревянная мебель своими руками. Сделать мебель своими руками видео. Опалубка для фундамента. Как сделать опалубку для фундамента быстро. Опалубка для фундамента купить.
Автор dr.MIG
dr.MIG
Врач-невролог, мануальный терапевт, спортсмен, администратор сайта и просто хороший человек
Пользователь не на сайте
Суббота, 26 мая 2012
в Блог

Модуль «Последние записи EasyBlog» для Joomla 2.5

В данной статье мы с вами создадим модуль для Joomla 2.5, который отображает последние записи из компонента EasyBlog. Ознакомиться с работой этого модуля можно на главной странице этого сайта. Кроме отображения последних записей, мы добавим функцию интеграции с phpBB, позволяющую выводить аватары пользователей. Таким образом стстья будет полезна тем, кто хочет научится самостоятельно создавать модули для Joomla 2.5. Итак, приступим.

CMS Joomla разработана на основе шаблона проектирования Модель-Представление-Поведение (MCV). Поэтому и структура всех компонентов в составе этой системы уравления контентом, для знакомых с данным шаблоном, покажется абсолютно понятной и логичной.

Рассмотрим структуру абстрактного модуля, в нашем случае он будет называться mod_easyblog_latest, как минимум он должен содержать:

  1.  mod_easyblog_latest.php — основной файл модуля.
  2.  mod_easyblog_latest.xml —  файл, содержащий информацию о модуле, а так же при необходимости настройки модуля.
  3. helper.php — файл, содержащий функции для получения информации, которую отображает модуль.
  4. index.html — пустой файл, необходимый в качестве дополнительного метода защиты (для того, чтобы в браузере не отображался список файлов директории к которой по какой-либо причине был открыт доступ для просмотра).
  5. tmpl/default.php — стандарнтый шаблон, непосредственно отображающий информацию на сайте, полученную при помощи функций, содержащихся в файле helper.

 В нашем случае в составе модуля кроме этих компонентов будет находиться папка images, содержащая файл noavatar.png, который будет выводиться в случае, если у пользователя аватар не установлен, но в настройках модуля включено отображение аватаров.

Рассмотрим теперь по порядку содержимое всех этих файлов. Весь код подробно прокомментирован, содержимое файла mod_easyblog.xml интуитивно понятен.

mod_easyblog_latest.php

//запрещаем прямой доступ к данному файлу
defined('_JEXEC') or die('Direct Access to this location is not allowed.');

//подключаем файл helper.php,
//содержащий класс с основными функциями,
//которые используются нашим модулем
require_once(dirname(__FILE__).DS.'helper.php');

//получаем настройки нашего модуля из файла mod_easy_blog.xml

//разделитель, отделяющий Имя автора записи от Названия записи
$delimeter = $params->get('delimeter');
//количество записей, отображаемых модулем
$post_count = $params->get('post_count');
//формат даты, отображаемой модулем
$date_format = $params->get('date_format');
//опция определяющая показывать или нет аватары при интеграции с phpBB
$display_avatars = $params->get('display_avatars');
//папка форума phpBB относительно корневого каталога Joomla
$phpbb = $params->get('phpbb');
//префикс таблиц форума из базы данных
$prefix = $params->get('prefix');
//максимальная высота аватара
$maxheight = $params->get('avatar_height');
//максимальная ширина аватара
$maxwidth = $params->get('avatar_width');
//сохранять или нет пропорции при изменении размера аватара
$avatar_keep_proportional = $params->get('avatar_keep_proportional');


//вызов функции getList класса modEasyBlogLatest, описанного в файле helper.php,
//полученные данные записываются в переменную $articles, которая
//используется для отображения этих данных в основном шаблоне модуля
$articles = modEasyBlogLatest::getList($params);

//подключаем основной шаблон модуля,
//по умолчанию файл default.php из папки tmpl
require(JModuleHelper::getLayoutPath('mod_easyblog_latest'));    

mod_easyblog_latest.xml

<extension type="module" client="site" version="1.6" method="upgrade">
        <name>EasyBlog Latest</name>
        <author>dr.MIG</author>
        <creationdate>2012-05-13</creationdate>>
        <copyright>Copyright dr.MIG</copyright>
        <license>GPL 2.0</license>
        <authoremail>admin AT ymanet.ru</authoremail>
        <authorurl>www.ymanet.ru</authorurl>
        <version>1.0</version>
        <description>Модуль выводит последние опубликованные записи блога.</description>
        <files>
                <filename module="mod_easyblog_latest">mod_easyblog_latest.php</filename>
                <filename>index.html</filename>
                <filename>helper.php</filename>
                <filename>tmpl/default.php</filename>
                <filename>tmpl/index.html</filename>
                <filename>images/noavatar.png</filename>
        </files>
<config>
        <fields name="params">
            </fields></config></extension><fieldset name="basic">
            <field name="delimeter" type="text" default="→" label="Разделитель" description="Метка, отделяющая имя автора от заголовка статьи"></field>
            <field name="post_count" type="text" default="5" label="Количество статей" description="Количество статей, выводимых модулем"></field>
            <field name="date_format" type="text" default="(d.m.Y)" label="Формат даты" description="Формат даты"></field>
            <field name="display_avatars" label="Отображать аватары с форума phpBB" type="radio" default="0" description="Отображать аватары с форума phpBB">
                <option value="0">JNO</option>
                <option value="1">JYES</option>         
            </field>
            <field name="phpbb" type="text" default="" label="Путь к форуму phpBB" description="Путь к форуму для получения аватара"></field>
            <field name="prefix" type="text" default="" label="Префикс таблиц форума" description="Префикс таблиц форума"></field>
            <field name="avatar_height" type="text" default="" label="Высота аватара" description="Высота аватара"></field>
            <field name="avatar_width" type="text" default="" label="Ширина аватара" description="Ширина аватара"></field>
            <field name="avatar_keep_proportional" label="Сохранять пропорции аватара" type="radio" default="0" description="Сохранять пропорции аватара">
                <option value="0">JNO</option>
                <option value="1">JYES</option>         
            </field>  
            </fieldset>
		</fields>
</config>
</extension>        

helper.php

//запрещаем прямой доступ к данному файлу
defined('_JEXEC') or die('Direct Access to this location is not allowed.');

//создаем основной класс с функциями
class modEasyBlogLatest {
    //функция, возвращающая массив, содержащий всю необходимую информацию,
    //которая будет отображаться модулем
    function getList($params)  {
        $delimeter = $params->get('delimeter');
        $post_count = $params->get('post_count');
        $date_format = $params->get('date_format');
        $display_avatars = $params->get('display_avatars');
        $phpbb = $params->get('phpbb');
        $prefix = $params->get('prefix');
        $maxheight = $params->get('avatar_height');
        $maxwidth = $params->get('avatar_width');
        $avatar_keep_proportional = $params->get('avatar_keep_proportional');
        
        $database = &JFactory::getDBO(); 
        
        $database->setQuery("SELECT id, created_by, title, created FROM #__easyblog_post WHERE published = 1 ORDER BY created DESC limit ".$post_count);
        $articles = $database->loadObjectList();
        
        //в случае включенной опции отображения аватар получаем их список из базы форума phpBB,
        //а так же вычисляем размеры аватар для вывода в модуле на основе настроек модуля
        if ($display_avatars) {
            for ($i=0; $icreated_by);
                $database->setQuery("SELECT user_avatar FROM ".$prefix."_users WHERE username='".$user->username."'");
                $user_avatar = $database->loadResult();
                    if (empty($user_avatar)) {
                        $user_avatar = '/modules/mod_easyblog_latest/images/noavatar.png'; 
                    }
                    else {
                        $user_avatar = '/'.$phpbb.'download/file.php?avatar='.$user_avatar;
                    }
                    $size = ($avatar_keep_proportional) ? @getimagesize($avatar) : false;
                    if($size!==false && ($size[0] > $maxwidth || $size[1] > $maxheight)) {
                        $wscale = $maxwidth/$size[0];
                        $hscale = $maxheight/$size[1];
                        $scale = min($hscale, $wscale);
                        $w = floor($scale*$size[0]);
                        $h = floor($scale*$size[1]);
                    } elseif($size!==false) {
                        $w = $size[0];
                        $h = $size[1];
                    } else {
                        $w = $maxwidth;
                        $h = $maxheight;    
                    }
                $avatar[$i]['w'] = $w;
                $avatar[$i]['h'] = $h;
                $avatar[$i]['src'] = $user_avatar;
                $articles[$i]->avatar = $avatar;
            }
        }
        return $articles;
    }
}    

default.php

    <div class="module_content">
        <ul style="list-style: none;">
        </ul>
    </div> 

Это заготовка для вывода списка, внутри нее необходимо разместить следующий php-код, который сформирует требуемый список:

<?php
$database = &JFactory::getDBO(); 
for ($i=0; $i<count($articles); $i++) {	
	$database->setQuery("SELECT nickname FROM #__easyblog_users WHERE id=".$articles[$i]->created_by);
	$userName = $database->loadResult();
	if ($display_avatars) {
		$avatar = '<img style="vertical-align:middle; float:left; margin:3px; max-width: '.$articles[$i]->avatar[$i]['w'].'px; max-height: '.$articles[$i]->avatar[$i]['h'].'px;" src="'.$articles[$i]->avatar[$i]['src'].'" alt="&#1040;&#1074;&#1072;&#1090;&#1072;&#1088;"/>';
	}
	echo '<li style="clear: left; margin-bottom: 5px;">'.$avatar.'<a href="/blogs/blogger/listings/invalid-blogger?gt;created_by_\'=">'.$userName.'</a> '.$delimeter.' <a href="/blogs/invalid-post?gt;id_\'=">'.$articles[$i]->title.'</a> '.JHTML::date($articles[$i]->created, $date_format).'</li>';
}
?>  

Теперь остается только упаковать все эти файлы в zip-архив и модуль готов к использованию после установки через стандартный Менеджер расширений Joomla.

Подробнее ознакомиться с функциями и внутренней структурой CMS Joomla вы можете на официальной странице разработчиков: http://docs.joomla.org/.

Узнать больше про язык программирования PHP, испольующийся при написании примеров к данной статье, вы можете здесь: http://www.php.net/.

Так же вы можете скачать модуль «Последние записи EasyBlog» для Joomla 2.5.

0 голосов
Врач-невролог, мануальный терапевт, спортсмен, администратор сайта и просто хороший человек

Комментарии

bvbiii
bvbiii
bvbiii не оставил информации о себе
Пользователь не на сайте
bvbiii Вторник, 19 июня 2012

А как к примеру отобразить аватар не из форума а из изи блога?
И как возможно вывести аватар в форму логина, то есть там где отображается здравствуйте (пользователь) Что бы с боку выводил аватар из изи блога ?

dr.MIG
dr.MIG
Врач-невролог, мануальный терапевт, спортсмен, администратор сайта и просто хороший человек
Пользователь не на сайте
dr.MIG Пятница, 03 августа 2012

По поводу первого вопроса — данная функция пока не реализована.
По поводу второго — вопрос к модулю отношения не имеет, реализуется путем модификации кода EasyBlog, ответственного за вывод менюшки и аватара, которая располагается по адресу components/com_easyblog/themes/default/toolbar.php, строка 143 (для версии 3.0.8, в других версиях может отличаться).

Илья
Илья
Илья не оставил информации о себе
Пользователь не на сайте
Илья Суббота, 15 сентября 2012

Проблема с модулем, вместо аватара показывает следующее: Notice: Undefined variable: avatar in /home/n-formata/n-formata.ru/docs/modules/mod_easyblog_latest/tmpl/default.php on line 12
Есть соображения на сей счет?

User
User
User не оставил информации о себе
Пользователь не на сайте
User Четверг, 07 марта 2013

Здравствуйте, не могу изменить ширину модуля, не нашел этого параметра либо заданы отступы у модуля

User
User
User не оставил информации о себе
Пользователь не на сайте
User Воскресенье, 10 марта 2013

Автор откликнитесь. нужна ваша помощь.

Чтобы добавить комментарий, сначала войдите, пожалуйста