Новости Joomla

Компания JetBrains рассказала о своей поддержке Joomla

Компания JetBrains рассказала о своей поддержке Joomla

Компания JetBrains рассказала о своей поддержке Joomla.JetBrains - один из мировых лидеров в разработке программного обеспечения для разработчиков. Её программные продукты - это IDE - профессиональные среды разработки, которые отличаются от простого блокнота/редактора с плагинами набором всевозможных инструментов для разработчиков, глубоким анализом кодовой базы, подсказками по ней и по языку программирования, отладкой ошибок и многим-многим другим. Одним из самых известных продуктов компании является IDE PHP Storm, который можно назвать отраслевым стандартом PHP-разработчика. В статье How PhpStorm Helps Maintain PHP Open-Source Projects: Interviews and Real-World Examples в блоге компании описываются Open Source проекты, которым JetBrains оказывает поддержку (это могут быть бесплатные лицензии для разработчиков для некоммерческих проектов). В список попали:- PHPUnit - фреймворк для unit-тестирования в PHP- Doctrine DBAL - библиотека для PHP, которая предоставляет лёгкий и гибкий слой для коммуникации с базой данных. Она поддерживает различные базы данных через единый и согласованный API.- CodeIgniter — популярный MVC-фреймворк для разработки на PHP- 👩‍💻 Joomla! - наша любимая CMS.Эти названия (кроме "Joomla") чаще всего не слышат вебмастера и разработчики обычных сайтов и интернет-магазинов. Но эти названия хорошо знакомы PHP-разработчикам, которые создают сложные и высоконагруженные проекты и микросервисы. То, что Joomla оказалась в одном ряду с такими программными инструментами - делает ей честь. 🙏 За ссылку спасибо участнику нашего сообщества Ринату Кажетову (@rkazhet). @joomlafeed#joomla #community

Joomla 6 нуждается в вашей помощи с тестированием.Вышел недавно релиз Joomla 6 alpha1

Joomla 6 нуждается в вашей помощи с тестированием.Вышел недавно релиз Joomla 6 alpha1

👩‍💻 Joomla 6 нуждается в вашей помощи с тестированием.Вышел недавно релиз Joomla 6 alpha1. Это релиз, в который включены уже проверенные изменения, но ещё очень многие исправления и улучшения ждут своей очереди. Joomla следит за качеством и безопасностью своего кода и каждое изменение должно быть успешно протестировано как минимум ещё двумя участниками сообщества. Разработка Joomla ведётся на платформе GitHub.Филипп Уолтон (Philip Walton) - один из разработчиков, кто активно вносит свой вклад в ядро Joomla. Он уже несколько месяцев посвящает свои послеполуденные часы пятницы работе с Joomla и предлагает присоединиться к нему. 📆 Пятница, 30 мая 2025, с 15:00 до 17:00 по UTC (Лондон) - с 18:00 до 20:00 по Москве.В чате Google Meet Филипп готов помочь с тестированием тем, кто будет делать это в первый раз. А так же он подготовил список лёгких Pull Request, которые можно протестировать довольно быстро. Чем больше тестов будет проведено сейчас, тем меньше ошибок вылезет потом. На данный момент 148 (уже 147 на момент написания заметки) PR на GitHub Joomla ждут тестирования.👩‍💻 Open to all. All together.Также вам поможет сделать первые шаги это видео.GitHub JoomlaДа, это вечер пятницы. Но тестирование занимает порой минут 15, а доброе дело сделано. Просто убедитесь, что разработчик чего-то не пропустил и всё работает как ожидается.#joomla #joomla6 #community

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

goga_pgasovav

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

Shustry

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

goga_pgasovav

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

goga_pgasovav

  • Захожу иногда
  • 444
  • 6 / 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

  • Захожу иногда
  • 444
  • 6 / 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
Просмотров: 7872
Последний ответ 03.02.2020, 18:49:47
от durte
При добавлении нового пункта меню не отображается содержимое

Автор Denko

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

Автор Sensession

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

Автор physic

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

Автор vasmed

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