
В этой статье предлагаю вниманию публики написанный мной модуль, который чувствителен к данным пункта меню. Какие данные пункта меню я имею в виду? Такие: - идентификатор меню - идентификатор статьи, на которую ссылается данный пункт меню.
Представим себе меню, пункты которого ссылаются на разные статьи. Каждая из этих статей имеет свою отличную от других категорию. В каждой из этих категорий имеются и другие статьи, кроме той, на которую ссылается пункт меню.
Наш модуль считывает ИД меню, ИД статьи, запрашивает в БД ИД категории, к которой принадлежит статья. Запрашивает данные по 6 последним (новейшим) статьям из данной категории. Используя эти данные выводит все 6 статей (заголовок, интротекст, картинка), естественно каждая статья со своей картинкой. В каждой статье есть ссылка-картинка "Подробнее" на полную версию статьи.
Статья, на которую ссылается пункт меню содержит только вызов нашего модуля, который и формирует страницу. То есть: {loadmodule mod_category_new, mod_category_new,MyNewStyle}
Каждая статья, на которую ссылается любой из пунктов меню, содержит одну только эту инструкцию, но результат на странице (контент, картинки и прочее) полностью зависит от пункта меню.
Собственно этот модуль иммитирует поведение страницы Блог категории. Расположение статей на странице полностью зависит от css-стилей и может быть любым.
Цена изделия, которая фигурирует в выводимых статьях, считывается из параметров модуля, и является фикцией, так как модуль имеет только демонстрационную версию. Так что цену можно вообще убрать.
Для того, чтобы картинки правильно вставлялись в свою категорию, надо называть их в формате: p1-80.jpg, p2-80.jpg, p3-80.jpg. Здесь 80 - ИД категории. Если картинки должны принадлежать другой категории, то указываете вместо 80 номер нужной категории. Модуль выберет и вставит их при выводе статьи в соответствующем пункте меню.

Файлы модуля:
helper.php
<?php
/**
* @package Joomla.Site
* @subpackage mod_category_new
* @author Albert Volos http://pick4you.ru October 2012
* @copyright Copyright (C) 2005 - 2012 Open Source Matters, Inc. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
// no direct access
defined('_JEXEC') or die;
class modMiddletop_newHelper
{
static function getAnonse(){
$menu = & JSite::getMenu();
$current_menu = $menu->getActive();
$cur_link = $current_menu->link;
//вычленим из ссылки ИД статьи
$frag = strrchr($cur_link, "&");
$pos = strpos($frag,'=');
$art_num = substr($frag,($pos+1));
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select('a.catid');
$query->order('a.created DESC');
$query->from('#__content AS a');
$query->where("a.id=$art_num");
$db->setQuery($query, 0);
$result = $db->loadObjectList();
$ar = array();
if (!empty($result)){
foreach($result as $name){
$ar[0] = $name->catid;
}
};
return (array) $ar;
}
static function getAnonse2($params){
$menu = & JSite::getMenu();
$current_menu = $menu->getActive();
$cur_alias = $current_menu->alias;//алиас пункта меню
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select('a.id, a.title, a.introtext, a.alias, a.catid');
$query->order('a.created DESC');
$query->from('#__content AS a');
$query->where("a.catid=$params");
$db->setQuery($query, 0);
$result = $db->loadObjectList();
$ar_f = array();
if (!empty($result)){
$index = 0;
foreach($result as $name){
$ar = array();
$ar[0] = $name->title;
$ar[1] = $name->introtext;
$ar[2] = $name->id;
$ar[3] = $name->alias;
$ar[4] = $name->catid;
$ar[5] = $cur_alias;
$ar_f[$index]=$ar;
$index++;
}
};
return (array) $ar_f;
}
}
?>
mod_category_new.php
<?php
/**
* @package Joomla.Site
* @subpackage mod_category_new
* @authorAlbert Volos http://pick4you.ru October 2012
* @copyright Copyright (C) 2005 - 2012 Open Source Matters, Inc. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
// no direct access
defined('_JEXEC') or die;
// Include the latest functions only once
require_once dirname(__FILE__).'/helper.php';
//переменная names доступна в шаблоне модуля
$ar2 = modMiddletop_newHelper::getAnonse();//эта функция вернет ИД категории
$t_catid = $ar2[0];
$ar = modMiddletop_newHelper::getAnonse2($t_catid);//эта функция вернет массив данных о статьях
$lenmas = count($ar);
//получим параметры из модуля
$it_ar = array();
for($i=0;$i<($lenmas-1);$i++){
$it = array();
$it[0] = $params->get("imgname$i", p1.jpg);//картинка для вывода в блок
$temp = $it[0];
$it[1] = $params->get("price_dollar$i", 0);//цена рубли
$it[2] = $params->get("price_cents$i", 0); //цена копейки
$it_ar[$i] = $it;
}
$moduleclass_sfx = htmlspecialchars($params->get('moduleclass_sfx'));
require JModuleHelper::getLayoutPath('mod_category_new', $params->get('layout', 'default'));
?>
default.php
<?php
/**
* @package Joomla.Site
* @subpackage mod_category_new
* @author Albert Volos http://pick4you.ru October 2012
* @copyright Copyright (C) 2005 - 2012 Open Source Matters, Inc. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
// no direct access
defined('_JEXEC') or die;
?>
<?php
if (!empty($ar)){
//$lenmas = count($ar);
for($i=0;$i<($lenmas-1);$i++){
$t_title = $ar[$i][0];
$t_intro = $ar[$i][1];
$t_id = $ar[$i][2];
$t_alias = $ar[$i][3];
$t_catid = $ar[$i][4];
$t_al = $ar[$i][5];
$path = "/JJ25_2/joomla/index.php/$t_al/$t_id-$t_alias";
$ta2 = $it_ar[$i][0];
//вычленим из ссылки расширение картинки
$frag2 = strchr($ta2, ".");
$pos = strpos($ta2,".");
$frag = substr($ta2,0,$pos);
$ta = "$frag-$t_catid$frag2";
$tb = $it_ar[$i][1];
$tc = $it_ar[$i][2];
?>
<div class="product_box"><a href="/"><img src="/media_users/01/<?php echo $ta ?>" alt="" class="prod_image" /></a>
<div class="product_details">
<div class="prod_title"><?php echo "<b> $t_title </b>"; ?></div>
<div class="product_introtext"><?php echo " $t_intro"; ?></div>
<p class="price">Price: <span class="price"><?php echo "$tb" ?>.<?php echo "$tc" ?> $ </b></span></p>
<a href="/<?php echo $path; ?>" class="details"><img src="/modules/mod_category_new/images/details.gif " alt="" /> </a>
</div><!-- End product_details-->
</div><!-- End product_box -->
<?php
}
}
?>
mod_category_new.xml
<?xml version="1.0" encoding="utf-8"?>
<extension
type="module"
version="2.5"
client="site"
method="upgrade">
<name>mod_category_new</name>
<author>Albert Volos</author>
<creationDate>October 2012</creationDate>
<copyright>Copyright (C) 2005 - 2012 Open Source Matters. All rights reserved.</copyright>
<license>GNU General Public License version 2 or later; see LICENSE.txt</license>
<authorEmail>pick4you$yandex.ru</authorEmail>
<authorUrl>www.pick4you.ru</authorUrl>
<version>2.5.0</version>
<description>MOD_CATEGORY_NEW_XML_DESCRIPTION</description>
<files>
<filename module="mod_category_new">mod_category_new.php</filename>
<folder>images</folder>
<folder>tmpl</folder>
<filename>helper.php</filename>
<filename>index.html</filename>
</files>
<languages>
<language tag="en-GB">en-GB.mod_category_new.ini</language>
<language tag="en-GB">en-GB.mod_category_new.sys.ini</language>
</languages>
<help key="JHELP_EXTENSIONS_MODULE_MANAGER_LATEST_USERS" />
<config>
<fields name="params">
<fieldset name="basic">
<field
name="imgname0"
type="text"
default="imgtest.jpg"
label="MOD_MIDDLETOP_NEW_FIELD_IMGNAME_LABEL"
description="MOD_MIDDLETOP_NEW_FIELD_IMGNAME_DESC">
</field>
<field
name="price_dollar0"
type="text"
default="0"
label="MOD_MIDDLETOP_NEW_FIELD_PRICEDOLLAR_LABEL"
description="MOD_MIDDLETOP_NEW_FIELD_PRICEDOLLAR_DESC">
</field>
<field
name="price_cents0"
type="text"
default="0"
label="MOD_MIDDLETOP_NEW_FIELD_PRICECENTS_LABEL"
description="MOD_MIDDLETOP_NEW_FIELD_PRICECENTS_DESC">
</field>
<field
name="imgname1"
type="text"
default="imgtest.jpg"
label="MOD_MIDDLETOP_NEW_FIELD_IMGNAME_LABEL"
description="MOD_MIDDLETOP_NEW_FIELD_IMGNAME_DESC">
</field>
<field
name="price_dollar1"
type="text"
default="0"
label="MOD_MIDDLETOP_NEW_FIELD_PRICEDOLLAR_LABEL"
description="MOD_MIDDLETOP_NEW_FIELD_PRICEDOLLAR_DESC">
</field>
<field
name="price_cents1"
type="text"
default="0"
label="MOD_MIDDLETOP_NEW_FIELD_PRICECENTS_LABEL"
description="MOD_MIDDLETOP_NEW_FIELD_PRICECENTS_DESC">
</field>
<field
name="imgname2"
type="text"
default="imgtest.jpg"
label="MOD_MIDDLETOP_NEW_FIELD_IMGNAME_LABEL"
description="MOD_MIDDLETOP_NEW_FIELD_IMGNAME_DESC">
</field>
<field
name="price_dollar2"
type="text"
default="0"
label="MOD_MIDDLETOP_NEW_FIELD_PRICEDOLLAR_LABEL"
description="MOD_MIDDLETOP_NEW_FIELD_PRICEDOLLAR_DESC">
</field>
<field
name="price_cents2"
type="text"
default="0"
label="MOD_MIDDLETOP_NEW_FIELD_PRICECENTS_LABEL"
description="MOD_MIDDLETOP_NEW_FIELD_PRICECENTS_DESC">
</field>
<field
name="imgname3"
type="text"
default="imgtest.jpg"
label="MOD_MIDDLETOP_NEW_FIELD_IMGNAME_LABEL"
description="MOD_MIDDLETOP_NEW_FIELD_IMGNAME_DESC">
</field>
<field
name="price_dollar3"
type="text"
default="0"
label="MOD_MIDDLETOP_NEW_FIELD_PRICEDOLLAR_LABEL"
description="MOD_MIDDLETOP_NEW_FIELD_PRICEDOLLAR_DESC">
</field>
<field
name="price_cents3"
type="text"
default="0"
label="MOD_MIDDLETOP_NEW_FIELD_PRICECENTS_LABEL"
description="MOD_MIDDLETOP_NEW_FIELD_PRICECENTS_DESC">
</field>
<field
name="imgname4"
type="text"
default="imgtest.jpg"
label="MOD_MIDDLETOP_NEW_FIELD_IMGNAME_LABEL"
description="MOD_MIDDLETOP_NEW_FIELD_IMGNAME_DESC">
</field>
<field
name="price_dollar4"
type="text"
default="0"
label="MOD_MIDDLETOP_NEW_FIELD_PRICEDOLLAR_LABEL"
description="MOD_MIDDLETOP_NEW_FIELD_PRICEDOLLAR_DESC">
</field>
<field
name="price_cents4"
type="text"
default="0"
label="MOD_MIDDLETOP_NEW_FIELD_PRICECENTS_LABEL"
description="MOD_MIDDLETOP_NEW_FIELD_PRICECENTS_DESC">
</field>
<field
name="imgname5"
type="text"
default="imgtest.jpg"
label="MOD_MIDDLETOP_NEW_FIELD_IMGNAME_LABEL"
description="MOD_MIDDLETOP_NEW_FIELD_IMGNAME_DESC">
</field>
<field
name="price_dollar5"
type="text"
default="0"
label="MOD_MIDDLETOP_NEW_FIELD_PRICEDOLLAR_LABEL"
description="MOD_MIDDLETOP_NEW_FIELD_PRICEDOLLAR_DESC">
</field>
<field
name="price_cents5"
type="text"
default="0"
label="MOD_MIDDLETOP_NEW_FIELD_PRICECENTS_LABEL"
description="MOD_MIDDLETOP_NEW_FIELD_PRICECENTS_DESC">
</field>
</fieldset>
<fieldset
name="advanced">
<field
name="layout"
type="modulelayout"
label="JFIELD_ALT_LAYOUT_LABEL"
description="JFIELD_ALT_MODULE_LAYOUT_DESC" />
<field
name="moduleclass_sfx"
type="text"
label="COM_MODULES_FIELD_MODULECLASS_SFX_LABEL"
description="COM_MODULES_FIELD_MODULECLASS_SFX_DESC" />
<field
name="cache"
type="list"
default="1"
label="COM_MODULES_FIELD_CACHING_LABEL"
description="COM_MODULES_FIELD_CACHING_DESC">
<option
value="1">JGLOBAL_USE_GLOBAL</option>
<option
value="0">COM_MODULES_FIELD_VALUE_NOCACHING</option>
</field>
<field
name="cache_time"
type="text"
default="900"
label="COM_MODULES_FIELD_CACHE_TIME_LABEL"
description="COM_MODULES_FIELD_CACHE_TIME_DESC" />
<field
name="cachemode"
type="hidden"
default="static">
<option
value="static"></option>
</field>
</fieldset>
</fields>
</config>
</extension>
|