Новости Joomla

Как тестировать Joomla PHP-разработчику? Компонент Patch tester.

👩‍💻 Как тестировать Joomla PHP-разработчику? Компонент Patch tester.Joomla - open source PHP-фреймворк с готовой админкой. Его основная разработка ведётся на GitHub. Для того, чтобы международному сообществу разработчиков было удобнее тестировать Pull Requests был создан компонент Patch Tester, который позволяет "накатить" на текущую установку Joomla именно те изменения, которые необходимо протестировать. На стороне инфраструктуры Joomla для каждого PR собираются готовые пакеты, в которых находится ядро + предложенные изменения. В каждом PR обычно находятся инструкции по тестированию: куда зайти, что нажать, ожидаемый результат. Тестировщики могут предположить дополнительные сценарии, исходя из своего опыта и найти баги, о которых сообщить разработчику. Или не найти, и тогда улучшение или исправление ошибки быстрее войдёт в ядро Joomla. Напомню, что для того, чтобы PR вошёл в ядро Joomla нужны минимум 2 положительных теста от 2 участников сообщества, кроме автора. Видео на YouTubeВидео на VK ВидеоВидео на RuTubeКомпонент на GitHub https://github.com/joomla-extensions/patchtester@joomlafeed#joomla #php #webdev #community

Вышел релиз Revo PageBuilder Toolkit for YOOtheme Pro 1.6

Вышел релиз Revo PageBuilder Toolkit for YOOtheme Pro 1.6.2PageBuilder Toolkit - это специализированный плагин для конструктора страниц Yootheme Pro, содержит набор различных утилит для ускорения процесса работы и отладки макета, множественные улучшения в интерфейсе, включая поддержку dark mode, подсказки, быстрая смена разрешения в окне просмотра и много чего еще.v.1.6.2 Что нового?- Индикатор статусов: теперь не просто показывает состояние запросов, но и делает автоматические попытки их отправки при кратковременных сбоях в сети, а если это не помогло, то переводит конструктор в ручной режим, что позволяет сохранит макет и настройки темы прежде чем вы потеряете все, что было сделано с момента последнего сохранения- Подсветка ошибок в макете: плагин анализирует код страницы и может автоматически подсвечивать data атрибуты с кучей мусора, которые попадают в код страницы при копипасте из Figma в TinyMCE (пригодится для старых макетов, в текущей работе плагин сам очищает код мусора). Также есть подсветка семантических ошибок сборки - дубли h1 тега на странице и вложенных друг в друга заголовков.- Улучшена поддержка будущего релиза Yootheme Pro 5 и редактора CodeMirror 6Плагин для русскоязычных пользователей доступен в каталоге расширений SovMart и распространяется за символическую плату (100р). Разработчики Joomla расширений и партнеры автора могут получить плагин бесплатно.Для работы плагина необходим конструктор страниц Yootheme Pro.Разработчик плагина - участник нашего сообщества Александр Судьбинов (@alexrevo), член официальной группы поддержки Yootheme Pro. Страница расширенияОписание на сайте автора@joomlafeed#joomla #yootheme

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

goga_pgasovav

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

Shustry

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

goga_pgasovav

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

goga_pgasovav

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

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

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

FairHypo

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


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

ELLE

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

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

Автор nexter

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

Автор Denko

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

Автор Sensession

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

Автор physic

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

Автор vasmed

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