Home Joomla Код Joomla Модули Joomla Меню параметры модуля Joomla
Меню параметры модуля Joomla PDF Печать E-mail
Автор: А.Волос   

В этой статье предлагаю вниманию публики написанный мной модуль, который чувствителен к данным пункта меню. Какие данные пункта меню я имею в виду?
Такие:
- идентификатор меню
- идентификатор статьи, на которую ссылается
данный пункт меню.  

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

Наш модуль считывает ИД меню, ИД статьи, запрашивает в БД ИД категории, к которой принадлежит статья. Запрашивает данные по 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>

 

Обновлено 29.09.2014 17:02