Новости Joomla

0 Пользователей и 1 Гость просматривают эту тему.
  • 112 Ответов
  • 58156 Просмотров
*

goga_pgasovav

  • Захожу иногда
  • 385
  • 4 / 0
  • Внимательный джумловод
Shustry, ах... вот в чем дело ^-^
1.5 у меня... это ведь ветка форума для Joomla 1.5...
А 2.5 я уже снёс. Много там переделывать под себя прийдется...
*

Shustry

  • Гуру
  • 6434
  • 745 / 3
Ууу. печалька. Под 1.5 даже не найду щас сам код нужный. Давно это было. В двух словах, там всё сложнее, нужно переопределять сам хелпер.
А зачем, если не секрет, вам J1.5? Это же уже позавчерашний день.
*

goga_pgasovav

  • Захожу иногда
  • 385
  • 4 / 0
  • Внимательный джумловод
Shustry,
Совсем не секрет. Просто уже подавляющее большинство модулей переделал под свои нуждны. Избавился от лишнего кода (html) и прочего. Ну и с расширениями так же. Вобщем очень быстро добиваюсь нужных результатов просто закачав свою сборку. А так то я бы с удовольствием на 2.5 перешёл. Там много всего удобного придумали конечно... Сори за офтоп.
Но работу меню то я тестировал на чистой сборке, без вмешательств. Там глюк и выявился.
*

goga_pgasovav

  • Захожу иногда
  • 385
  • 4 / 0
  • Внимательный джумловод
Вообще, я в неделёком будущем хочу окончательно переползти на 2.5, но с текущим проектом такой фокус не пройдёт.
*

Shustry

  • Гуру
  • 6434
  • 745 / 3
Нашёл от старого проекта (2008-й год) файлы. Переопределял там меню. Структура:
шаблон/html/mod_mainmenu/helper.php
шаблон/html/mod_mainmenu/default.php
Листинг:
helper:
Код: php
<?php defined('_JEXEC') or die('Restricted access');

jimport('joomla.base.tree');
jimport('joomla.utilities.simplexml');
 
 
class WebmodMainMenuHelper
{
function WebbuildXML($params)
{
$menu = new WebJMenuTree($params);
$items = &JSite::getMenu();

// Get Menu Items
$rows = $items->getItems('menutype', $params->get('menutype'));
$maxdepth = $params->get('maxdepth',10);

// Build Menu Tree root down (orphan proof - child might have lower id than parent)
$user =& JFactory::getUser();
$ids = array();
$ids[0] = true;
$last = null;
$unresolved = array();
// pop the first item until the array is empty if there is any item
if ( is_array($rows)) {
while (count($rows) && !is_null($row = array_shift($rows)))
{
if (array_key_exists($row->parent, $ids)) {
$row->ionly = $params->get('menu_images_link');
$menu->addNode($params, $row);

// record loaded parents
$ids[$row->id] = true;
} else {
// no parent yet so push item to back of list
// SAM: But if the key isn't in the list and we dont _add_ this is infinite, so check the unresolved queue
if(!array_key_exists($row->id, $unresolved) || $unresolved[$row->id] < $maxdepth) {
array_push($rows, $row);
// so let us do max $maxdepth passes
// TODO: Put a time check in this loop in case we get too close to the PHP timeout
if(!isset($unresolved[$row->id])) $unresolved[$row->id] = 1;
else $unresolved[$row->id]++;
}
}
}
}
return $menu->toXML();
}

function &getXML($type, &$params, $decorator)
{
static $xmls;

if (!isset($xmls[$type])) {
$cache =& JFactory::getCache('mod_mainmenu');
$string = $cache->call(array('WebmodMainMenuHelper', 'WebbuildXML'), $params);
$xmls[$type] = $string;
}

// Get document
$xml = JFactory::getXMLParser('Simple');
$xml->loadString($xmls[$type]);
$doc = &$xml->document;

$menu = &JSite::getMenu();
$active = $menu->getActive();
$start = $params->get('startLevel');
$end = $params->get('endLevel');
$sChild = $params->get('showAllChildren');
$path = array();

// Get subtree
if ($start)
{
$found = false;
$root = true;
if(!isset($active)){
$doc = false;
}
else{
$path = $active->tree;
for ($i=0,$n=count($path);$i<$n;$i++)
{
foreach ($doc->children() as $child)
{
if ($child->attributes('id') == $path[$i]) {
$doc = &$child->ul[0];
$root = false;
break;
}
}

if ($i == $start-1) {
$found = true;
break;
}
}
if ((!is_a($doc, 'JSimpleXMLElement')) || (!$found) || ($root)) {
$doc = false;
}
}
}

if ($doc && is_callable($decorator)) {
$doc->map($decorator, array('end'=>$end, 'children'=>$sChild));
}
return $doc;
}

function render(&$params, $callback)
{
switch ( $params->get( 'menu_style', 'list' ) )
{
default :
// Include the new menu class
$xml = WebmodMainMenuHelper::getXML($params->get('menutype'), $params, $callback);
if ($xml) {
$class = $params->get('class_sfx');
$xml->addAttribute('class', 'menu'.$class);
if ($tagId = $params->get('tag_id')) {
$xml->addAttribute('id', $tagId);
}

$result = JFilterOutput::ampReplace($xml->toString((bool)$params->get('show_whitespace')));
$result = str_replace(array('<ul/>', '<ul />'), '', $result);
echo $result;
}
break;
}
}
}


class WebJMenuTree extends JTree
{

/**
* Node/Id Hash for quickly handling node additions to the tree.
*/
var $_nodeHash = array();

/**
* Menu parameters
*/
var $_params = null;

/**
* Menu parameters
*/
var $_buffer = null;


function __construct(&$params)
{
$this->_params =& $params;
$this->_root = new JMenuNode(0, 'ROOT');
$this->_nodeHash[0] =& $this->_root;
$this->_current =& $this->_root;
$this->_ment = & $params->get( 'menu_style' );

if (
($this->_ment == "horiz_flat") and
(
stristr($_SERVER['HTTP_USER_AGENT'], 'MSIE 6.0') or
stristr($_SERVER['HTTP_USER_AGENT'], 'MSIE 7.0')
)
)
{$m_style = 'm_table';}
else {$m_style = 'm_list';}


if (
($this->_ment == "horiz_flat") and
(
stristr($_SERVER['HTTP_USER_AGENT'], 'MSIE 6.0') or
stristr($_SERVER['HTTP_USER_AGENT'], 'MSIE 7.0')
)
)
{$m_style = 'm_table';}
if ($this->_ment == "list_flat")
{$m_style = 'm_link';}
if ($this->_ment == "list")
{$m_style = 'm_list';}
$this->_m_style = $m_style;
}

function addNode(&$params, $item)
{
// Get menu item data
$data = $this->_getItemData($params, $item);

// Create the node and add it
$node = new JMenuNode($item->id, $item->name, $item->access, $data);

if (isset($item->mid)) {
$nid = $item->mid;
} else {
$nid = $item->id;
}
$this->_nodeHash[$nid] =& $node;
$this->_current =& $this->_nodeHash[$item->parent];

if ($item->type == 'menulink' && !empty($item->query['Itemid'])) {
$node->mid = $item->query['Itemid'];
}

if ($this->_current) {
$this->addChild($node, true);
} else {
// sanity check
JError::raiseError( 500, 'Orphan Error. Could not find parent for Item '.$item->id );
}
}

function toXML()
{
// Initialize variables
$this->_current =& $this->_root;

// Recurse through children if they exist
while ($this->_current->hasChildren())
{
if ( $this->_m_style == "m_table") {
$this->_buffer .= '<table><tr>';
foreach ($this->_current->getChildren() as $child)
{
$this->_current = & $child;
$this->_getLevelXML(0);
}
$this->_buffer .= '</tr></table>';

};
if ( $this->_m_style == "m_list") {
$this->_buffer .= '<ul>';
foreach ($this->_current->getChildren() as $child)
{
$this->_current = & $child;
$this->_getLevelXML(0);
}
$this->_buffer .= '</ul>';
};
if ( $this->_m_style == "m_link") {
$this->_buffer .= '<div>';
foreach ($this->_current->getChildren() as $child)
{
$this->_current = & $child;
$this->_getLevelXML(0);
}
$this->_buffer .= '</div>';
};

}

return $this->_buffer;
}

function _getLevelXML($depth)
{

$depth++;

// Start the item
$rel = (!empty($this->_current->mid))? ' rel="'.$this->_current->mid.'"' : '';



if (( $this->_m_style == "m_table") and ($depth==1)) {
$this->_buffer .= '<td access="'.$this->_current->access.'" level="'.$depth.'" id="'.$this->_current->id.'"'.$rel.'>';};
if ($this->_m_style == "m_list") {
$this->_buffer .= '<li access="'.$this->_current->access.'" level="'.$depth.'" id="'.$this->_current->id.'"'.$rel.'>';};
if ($this->_m_style == "m_link") {
$this->_buffer .= '';};

// Append item data
$this->_buffer .= $this->_current->link;
foreach ($this->_current->getChildren() as $child)
while ($this->_current->hasChildren())
{
$this->_buffer .= '<ul>';
foreach ($this->_current->getChildren() as $child)
{
$this->_current = & $child;
$this->_getLevelXML($depth);
}
$this->_buffer .= '</ul>';
}
// Finish the item


if (( $this->_m_style == "m_table") and ($depth==1)) {
$this->_buffer .= '</td>';};
if ($this->_m_style == "m_list") {
$this->_buffer .= '</li>';};
if ($this->_m_style == "m_link") {
$this->_buffer .= '';};
}

function do_translit($st) {
$replacement = array(
"й"=>"i","ц"=>"c","у"=>"u","к"=>"k","е"=>"e","н"=>"n",
"г"=>"g","ш"=>"sh","щ"=>"sh","з"=>"z","х"=>"x","ъ"=>"",
"ф"=>"f","ы"=>"i","в"=>"v","а"=>"a","п"=>"p","р"=>"r",
"о"=>"o","л"=>"l","д"=>"d","ж"=>"zh","э"=>"ie","ё"=>"e",
"я"=>"ya","ч"=>"ch","с"=>"c","м"=>"m","и"=>"i","т"=>"t",
"ь"=>"","б"=>"b","ю"=>"yu",

"Й"=>"I","Ц"=>"C","У"=>"U","К"=>"K","Е"=>"E","Н"=>"N",
"Г"=>"G","Ш"=>"SH","Щ"=>"SH","З"=>"Z","Х"=>"X","Ъ"=>"",
"Ф"=>"F","Ы"=>"I","В"=>"V","А"=>"A","П"=>"P","Р"=>"R",
"О"=>"O","Л"=>"L","Д"=>"D","Ж"=>"ZH","Э"=>"IE","Ё"=>"E",
"Я"=>"YA","Ч"=>"CH","С"=>"C","М"=>"M","И"=>"I","Т"=>"T",
"Ь"=>"","Б"=>"B","Ю"=>"YU",

" "=>"-","№"=>"",","=>"","!"=>"","»"=>"","«"=>"","/"=>"",
);
foreach($replacement as $i=>$u)
{
       $st = mb_eregi_replace($i,$u,$st);
}
return $st;
}

function _getItemData(&$params, $item)
{
$data = null;
$tname = array($item->name, $st);

// Menu Link is a special type that is a link to another item
if ($item->type == 'menulink')
{
$menu = &JSite::getMenu();
if ($newItem = $menu->getItem($item->query['Itemid'])) {
     $tmp = clone($newItem);
$tmp->name = '<span><![CDATA['.$item->name.']]></span>';
$tmp->mid = $item->id;
$tmp->parent = $item->parent;
} else {
return false;
}
} else {

$tmp = clone($item);
$tmp->name = '<span><![CDATA['.$item->name.']]></span>';
//$tmp->name = '<span class="'.$this->do_translit($item->name).'"><![CDATA['.$item->name.']]></span>';
}

$pos1=mb_strpos($item->name,'::');
if ($pos1>0) {
$name1 = mb_substr($item->name,0,$pos1);
$tmp->name  = '<span><![CDATA['.$name1.']]></span>';
$tmp->title = mb_substr($item->name,$pos1+2);}
else { $tmp->title = $item->name;}



$iParams = new JParameter($tmp->params);
if ($params->get('menu_images') && $iParams->get('menu_image') && $iParams->get('menu_image')!= -1) {
switch ($params->get('menu_images_align', 0)){
case 0 :
$imgalign='align="left"';
break;

case 1 :
$imgalign='align="right"';
break;

default :
$imgalign='';
break;
}


$image = '<img src="'.JURI::base(true).'/images/stories/'.$iParams->get('menu_image').'" '.$imgalign.' alt="'.$item->alias.'" />';
if($tmp->ionly){
$tmp->name = null;
}
} else {
$image = null;
}
switch ($tmp->type)
{
case 'separator' :
return '<span class="separator">'.$image.$tmp->name.'</span>';
break;

case 'url' :
if ((strpos($tmp->link, 'index.php?') === 0) && (strpos($tmp->link, 'Itemid=') === false)) {
$tmp->url = $tmp->link.'&amp;Itemid='.$tmp->id;
} else {
$tmp->url = $tmp->link;
}
break;

default :
$router = JSite::getRouter();
$tmp->url = $router->getMode() == JROUTER_MODE_SEF ? 'index.php?Itemid='.$tmp->id : $tmp->link.'&Itemid='.$tmp->id;
break;
}

// Print a link if it exists
if ($tmp->url != null)
{
// Handle SSL links
$iSecure = $iParams->def('secure', 0);
if ($tmp->home == 1) {
$tmp->url = JURI::base();
} elseif (strcasecmp(substr($tmp->url, 0, 4), 'http') && (strpos($tmp->link, 'index.php?')!== false)) {
$tmp->url = JRoute::_($tmp->url, true, $iSecure);
} else {
$tmp->url = str_replace('&', '&amp;', $tmp->url);
}

switch ($tmp->browserNav)
{
default:
case 0:
// _top
$data = '<a class="'.$this->do_translit($item->name).'" title="'.$tmp->title.'" href="'.$tmp->url.'">'.$image.$tmp->name.'</a>';
break;
case 1:
// _blank
$data = '<a title="'.$tmp->title.'"  href="'.$tmp->url.'" target="_blank">'.$image.$tmp->name.'</a>';
break;
case 2:
// window.open
$attribs = 'toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes,'.$this->_params->get('window_open');

// hrm...this is a bit dickey
$link = str_replace('index.php', 'index2.php', $tmp->url);
$data = '<a title="'.$tmp->title.'"  href="'.$link.'" onclick="window.open(this.href,\'targetWindow\',\''.$attribs.'\');return false;">'.$image.$tmp->name.'</a>';
break;
}
} else {
$data = '<a title="'.$tmp->title.'" >'.$image.$tmp->name.'</a>';
}

return $data;
}
}

/**
 * Main Menu Tree Node Class.
 *
 * @package Joomla
 * @subpackage Menus
 * @since 1.5
 */
class WebJMenuNode extends JNode
{
/**
* Node Title
*/
var $title = null;

/**
* Node Link
*/
var $link = null;

/**
* CSS Class for node
*/
var $class = null;

function __construct($id, $title, $access = null, $link = null, $class = null)
{
$this->id = $id;
$this->title = $title;
$this->access = $access;
$this->link = $link;
$this->class = $class;
}

}
default:

Код: php
<?php
// no direct access
defined('_JEXEC') or die('Restricted access');
require_once (dirname(__FILE__).DS.'helper.php');

if ( ! defined('WebmodMainMenuXMLCallbackDefined') )
{
function WebmodMainMenuXMLCallback(&$node, $args)
{
$user = &JFactory::getUser();
$menu = &JSite::getMenu();
$active = $menu->getActive();
$path = isset($active)? array_reverse($active->tree) : null;

if (($args['end']) && ($node->attributes('level') >= $args['end']))
{
$children = $node->children();
foreach ($node->children() as $child)
{
if ($child->name() == 'ul') {
$node->removeChild($child);
}
}
}


if (isset($path) && (in_array($node->attributes('id'), $path) || in_array($node->attributes('rel'), $path)))
{
if ($node->attributes('class')) {
$node->addAttribute('class', $node->attributes('class').' active');
} else {
$node->addAttribute('class', 'active');
}
}
else
{
if (isset($args['children']) && !$args['children'])
{
$children = $node->children();
foreach ($node->children() as $child)
{
if ($child->name() == 'ul') {
$node->removeChild($child);
}
}
}
}

if (($node->name() == 'li') && ($id = $node->attributes('id'))) {
if ($node->attributes('class')) {
$node->addAttribute('class', $node->attributes('class').' item'.$id);
} else {
$node->addAttribute('class', 'item'.$id);
}
}

if (isset($path) && $node->attributes('id') == $path[0]) {
$node->addAttribute('class', $node->attributes('class').' current');
$node->removeAttribute('id');
} else {
$node->removeAttribute('id');
}

if (($node->name() == 'li') && isset($node->ul)) {
$node->addAttribute('class', $node->attributes('class').' parent');
}


$node->removeAttribute('rel');
$node->removeAttribute('level');
$node->removeAttribute('access');
}
define('WebmodMainMenuXMLCallbackDefined', true);
}

$menu_style = $params->get('menu_style');

if ($menu_style == "horiz_flat") {
if (stristr($_SERVER['HTTP_USER_AGENT'], 'MSIE 6.0') or stristr($_SERVER['HTTP_USER_AGENT'], 'MSIE 7.0')) {
WebmodMainMenuHelper::render($params, 'WebmodMainMenuXMLCallback');
} else {
echo "<div class='menu-table'>";
WebmodMainMenuHelper::render($params, 'WebmodMainMenuXMLCallback');
echo "</div>";
}
} else {
WebmodMainMenuHelper::render($params, 'WebmodMainMenuXMLCallback');
}
Там много лишнего в файлах, собственные поделки какие-то, выкосите не забудьте.
*

goga_pgasovav

  • Захожу иногда
  • 385
  • 4 / 0
  • Внимательный джумловод
Shustry, огромное спасибо! Буду ковырять!
В том то и беда, что в модуле меню для Joomla 1.5 я уже навел для себя красоту, типа класс current а не ID, убрал лишние классы и всякий мусор.
*

rafaello9

  • Захожу иногда
  • 152
  • 2 / 0
Господа хорошие!
Помогите избавиться от дубли главной страницы j1.5
http://oldtashkent.ru/home.html
Если убираю алиас (home), то автоматом прописывается число даты
http://oldtashkent.ru/08-12-14.html

Как сделать пункт в главном меню "Главная", чтобы показывал
http://oldtashkent.ru

Спасибо! С нетерпением жду Вашей помощи.
*

Фенест

  • Новичок
  • 6
  • 1 / 0
нужно, что бы тэг <a> заполнял все пространство <li>, он у меня широкий и высокий. Слева и сверху
я прописал для <a>
Код
display:block;
height:100%;
width:100%;

и сверху сделал
Код
padding-top:4px;
margin-top:-4px;
,
Это сработало. А вот что бы слева была ссылка - никак. Горизонтальный отрицательный margin не бывает.
*

Shustry

  • Гуру
  • 6434
  • 745 / 3
Чтобы работал отрицательный margin нужно прописать position:relative;
*

Фенест

  • Новичок
  • 6
  • 1 / 0
Цитировать
Чтобы работал отрицательный margin нужно прописать position:relative;

Ура, спасибище!
*

system1024

  • Осваиваюсь на форуме
  • 33
  • 0 / 0
Добрый день

Почему пункты меню не поверх, а за центральной страницей?


z-index не помогает.
*

Shustry

  • Гуру
  • 6434
  • 745 / 3
Ну где-то косяк в вёрстке.
*

system1024

  • Осваиваюсь на форуме
  • 33
  • 0 / 0
С перекрытием разобрался. Теперь не могу понять, почему у меня третий уровень подпунктов отображается вместе со вторым. То есть раскрыт сразу, как только я навожу курсор на второй уровень пункта.
*

Shustry

  • Гуру
  • 6434
  • 745 / 3
Надо сайт смотреть. Ссылку выложите.
*

system1024

  • Осваиваюсь на форуме
  • 33
  • 0 / 0
К сожалению пока не смогу ссылку дать. Могу только код CSS. Если скажете, какой код и откуда показать - не вопрос.
Код
ul.menu {
position: relative
top: 0px;
left: 0px;
list-style-type: none;
padding:0;
margin:0;
 
 
}
 ul.menu li {
list-style-type: none;
padding-left:10px;
padding-right:10px;
padding-bottom:0px;
padding-top:0px;
background-image: url(../images/bb_tl.gif);
background-position: right top;
background-repeat: no-repeat;
position:relative;
}
 
 ul.menu a {
display: block;
height: 22px;
padding: 0 10px;
overflow: hidden;
color: #7a7a7a;
font-family:Grotic;
font-style:bold;
font-size: 11px;
text-transform: uppercase;
text-decoration:none;
padding-top:3px;
}
ul.menu li.active a, ul.menu li a:hover {
color:#E8A03D;
}
ul.menu li a, ul.menu li.active ul li a  {
color:#7a7a7a;
}
 
ul.menu li ul {
    display:none;
    list-style: none;
    top: 0;
    width: 210px;
    position:absolute;
    left: 150px; /*меню раскрывается вправо*/
    padding:10px;
    margin-bottom:1px;
    background-color:white;
    z-index: 1;
   
}



ul.menu li:hover ul {
    display:block;
}
ul.menu li:hover ul li a{
    height:auto;
}

Если получится, то выложу ссылку чуть позже.
*

Shustry

  • Гуру
  • 6434
  • 745 / 3
Попробуйте так:

ul.menu li:hover>ul {
    display:block;
}
*

system1024

  • Осваиваюсь на форуме
  • 33
  • 0 / 0
Попробуйте так:

ul.menu li:hover>ul {
    display:block;
}

Магия! :) Получилось, благодарю.
*

system1024

  • Осваиваюсь на форуме
  • 33
  • 0 / 0
А можно ли сделать, чтобы меню раскрывалось при нажатии, а не при наведении курсора?
*

Shustry

  • Гуру
  • 6434
  • 745 / 3
Пожалуйста. Можно, но уже сложнее. Это JS надо юзать.
*

FairHypo

  • Осваиваюсь на форуме
  • 15
  • 0 / 0
Скажите пожалуйста, вот так реально сделать одним модулем меню или для каждого подпункта нужно свое меню описывать?

Имею в виду подменю под основным, выпадающие в своих разделах. Потыкайте по пунктам, поймете, о чем речь.
*

ELLE

  • Глобальный модератор
  • 4510
  • 893 / 0
*

FairHypo

  • Осваиваюсь на форуме
  • 15
  • 0 / 0
@FairHypo, реально.


Спасибо! Вы мне очень помогли! А если серьезно, как это реализовать?
*

ELLE

  • Глобальный модератор
  • 4510
  • 893 / 0
Помощь будет, когда будет конкретная проблема. Вы задали вопрос - реально ли, получили ответ - реально.
Создайте отдельную тему, в которой вы опишите что вы попытались сделать и самое главное КАК.
А так, лентяев здесь не любят, готовый код/инструкцию можете не ждать.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

убрать из меню заголовки h3

Автор nexter

Ответов: 19
Просмотров: 6397
Последний ответ 03.02.2020, 18:49:47
от durte
При добавлении нового пункта меню не отображается содержимое

Автор Denko

Ответов: 2
Просмотров: 2074
Последний ответ 16.01.2020, 18:40:55
от Denko
Не нажимается пункт меню на мобильной версии

Автор Sensession

Ответов: 7
Просмотров: 3002
Последний ответ 04.01.2020, 16:45:27
от xpank
Не отображаются пункты в меню

Автор physic

Ответов: 20
Просмотров: 21288
Последний ответ 20.09.2019, 16:54:01
от beliyadm
Как в ARI Ext Menu добиться работы параметра "Показать в меню"?

Автор vasmed

Ответов: 1
Просмотров: 2289
Последний ответ 01.03.2019, 11:12:18
от vasmed