Good time of day!

Having dealt with JS, I encountered the following problem. Not good in PHP, I don’t know how to assign a unique class to each item of UL.

<?php defined('_JEXEC') or die; require_once dirname(dirname(dirname(__FILE__))) . DIRECTORY_SEPARATOR . 'functions.php'; // Note: it is important to remove spaces between elements. $tag = ($params->get('tag_id') != NULL) ? ' id="' . $params->get('tag_id') . '"' : ''; if (isset($attribs['name']) && $attribs['name'] == 'user3') { $menutype = 'horizontal'; $start = $params->get('startLevel'); // check if it is necessary to render subitems: $subitems = $GLOBALS['artx_settings']['menu']['show_submenus'] && 1 == $params->get('showAllChildren'); // true - skip the current node, false - render the current node. $skip = false; echo '<ul class="hmenu"' . $tag . '>'; foreach ($list as $i => & $item) { if ($skip) { if ($item->shallower) { if (($item->level - $item->level_diff) <= $limit) { echo '</li>' . str_repeat('</ul></li>', $limit - $item->level + $item->level_diff); $skip = false; } } continue; } $class = 'item-' . $item->id; $class .= $item->id == $active_id ? ' current' : ''; $class .= ('alias' == $item->type && in_array($item->params->get('aliasoptions'), $path) || in_array($item->id, $path)) ? ' active' : ''; $class .= $item->deeper ? ' deeper' : ''; $class .= $item->parent ? ' parent' : ''; echo '<li class="' . $class . '">'; // Render the menu item. switch ($item->type) { case 'separator': case 'url': case 'component': require JModuleHelper::getLayoutPath('mod_menu', 'default_' . $item->type); break; default: require JModuleHelper::getLayoutPath('mod_menu', 'default_url'); break; } if ($item->deeper) { if (!$subitems) { $limit = $item->level; $skip = true; continue; } echo '<ul class="dropmenu">'; } elseif ($item->shallower) echo '</li>' . str_repeat('</ul></li>', $item->level_diff); else echo '</li>'; } echo '</ul>'; } else if (0 === strpos($params->get('moduleclass_sfx'), 'vmenu') || false !== strpos($params->get('moduleclass_sfx'), ' vmenu')) { $menutype = 'vertical'; $start = $params->get('startLevel'); // check if it is necessary to render subitems: $subitems = $GLOBALS['artx_settings']['vmenu']['show_submenus'] && 1 == $params->get('showAllChildren'); // true - skip the current node, false - render the current node. $skip = false; // limit of rendering - skip items when a level is exceeding the limit. $limit = $start; echo '<ul class="vmenu"' . $tag . '>'; foreach ($list as $i => & $item) { if ($skip) { if ($item->shallower) { if (($item->level - $item->level_diff) <= $limit) { echo '</li>' . str_repeat('</ul></li>', $limit - $item->level + $item->level_diff); $skip = false; } } continue; } $class = 'item-' . $item->id; $class .= $item->id == $active_id ? ' current' : ''; $class .= ('alias' == $item->type && in_array($item->params->get('aliasoptions'), $path) || in_array($item->id, $path)) ? ' active' : ''; $class .= $item->deeper ? ' deeper' : ''; $class .= $item->parent ? ' parent' : ''; echo '<li class="' . $class . '">'; // Render the menu item. switch ($item->type) { case 'separator': case 'url': case 'component': require JModuleHelper::getLayoutPath('mod_menu', 'default_' . $item->type); break; default: require JModuleHelper::getLayoutPath('mod_menu', 'default_url'); break; } if ($item->deeper) { if (!$subitems) { $limit = $item->level; $skip = true; continue; } echo '<ul' . ($subitems && in_array($item->id, $path) ? ' class="dropmenu"' : '') . ' >'; } elseif ($item->shallower) echo '</li>' . str_repeat('</ul></li>', $item->level_diff); else echo '</li>'; } echo '</ul>'; } else { $menutype = 'default'; echo '<ul class="menu' . $params->get('class_sfx') . '"' . $tag . '>'; foreach ($list as $i => &$item) { $class = 'item-' . $item->id; $class .= $item->id == $active_id ? ' current' : ''; $class .= ('alias' == $item->type && in_array($item->params->get('aliasoptions'), $path) || in_array($item->id, $path)) ? ' active' : ''; $class .= $item->deeper ? ' deeper' : ''; $class .= $item->parent ? ' parent' : ''; echo '<li class="' . $class . '">'; // Render the menu item. switch ($item->type) { case 'separator': case 'url': case 'component': require JModuleHelper::getLayoutPath('mod_menu', 'default_'.$item->type); break; default: require JModuleHelper::getLayoutPath('mod_menu', 'default_url'); break; } if ($item->deeper) echo '<ul class="dropmenu">'; elseif ($item->shallower) echo '</li>' . str_repeat('</ul></li>', $item->level_diff); else echo '</li>'; } echo '</ul>'; } 

I understood only that these strings are responsible for the class name.

  if ($item->deeper) { if (!$subitems) { $limit = $item->level; $skip = true; continue; } echo '<ul class="dropmenu">'; } elseif ($item->shallower) echo '</li>' . str_repeat('</ul></li>', $item->level_diff); else 

Please tell me how to add a +1 or text value to the class name to make it dropmenu1, dropmenu2, dropmenu3, and so on.

I tried using JS, but the script for which classes are needed all the classes N + 1 counts for one. Thank!

    1 answer 1

    For uniqueness, add the current date and time.

     $now = DateTime::createFromFormat('U.u', microtime(true)); echo '<ul class="dropmenu'.$now->format("YmdHisu").'">'; 

    Or just time

     $now = DateTime::createFromFormat('U.u', microtime(true)); echo '<ul class="dropmenu'.$now->format("Hisu").'">'; 

    Or even easier the usual random value from 0 to 1000 (but two identical numbers may fall out)

     echo '<ul class="dropmenu'.rand(0,1000).'">'; 

    Or in start a standard counter and increase it in a cycle.

    • I think it’s about the uniqueness only inside the document - the usual incremental counter is enough - splash58
    • @ splash58 there is so much written that I am even too lazy to try out the cycle - n.osennij
    • Is it possible to do something like $ i ++ where i = 1? I tried, but not in the class name, but like this <ul class = "dropmenu hmenu-left-to-right drop1" 1 "=" "style =" "> - V.Shukhminov
    • @ V.Shukhminov means you have not replaced something in your code. - n.osennij
    • @ V.Shukhminov Replace your echo '<ul class="dropmenu">'; on one of the options. Please note that in the code you have such constructions TWO - n.osennij