crear - ¿Cómo obtener elementos de menú específicos de joomla?
crear menu en joomla (9)
Esta pregunta es un poco específica para Joomla.
Tengo un menú principal que consiste en:
Inicio | Quiénes somos | Política de privacidad | Portafolio | Contactos US .
Cada elemento del menú está vinculado a un artículo.
Ahora en el sitio completo hay muchos lugares en los componentes y módulos donde necesito mostrar dos enlaces: Política de privacidad y Portafolio.
¿Alguien por favor me puede guiar? No quiero codificar los enlaces ya que la identificación del artículo diferiría en la producción.
¿No es más fácil crear un nuevo menú que contenga dos alias para los menús que desea luego cargarlos en cualquier lugar del sitio web utilizando {loadposition}
o lo que sea?
Creo que deberías crear un nuevo menú en joomla y luego hacer alias el tipo de elementos del menú, debes hacer esto para asegurarte de no tener problemas de contenido duplicado. Creo que Alex responde que está bien si quieres hacerlo con código, pero es más difícil de mantener y que alguien entienda quién aparece. Como es un elemento de menú, en mi opinión no pertenece a un componente o módulo.
En Joomla hay una opción para enlazar con cualquier menú con una opción de hipervínculo en particular. Desde la estructura del menú de backend donde se coloca el enlace del artículo, desde allí también puede seleccionar otro enlace.
Hay 2 formas en que puedes hacerlo:
Opción 1:
Joomla carga los menús cada vez que se carga la página. Puede acceder a los menús llamando a los siguientes métodos.
// Get default menu - JMenu object, look at JMenu api docs
$menu = JFactory::getApplication()->getMenu();
// Get menu items - array with menu items
$items = $menu->getMenu();
// Look through the menu structure, once you understand it
// do a loop and find the link that you need.
var_dump($items);
Este método es más rápido porque no necesita consultar la base de datos. Operación simple en memoria.
Opcion 2:
Obtenlo de la base de datos. Obtenga el enlace del menú de jos_menu
basado en un alias o algo así, o obtenga el artículo # de jos_content
por el alias del artículo, luego cree el enlace
$db = JFactory::getDBO();
// Load by menu alias
$query = "SELECT link FROM #__menu WHERE alias = ''privacy-policy''";
$db->setQuery($query);
$url = $db->loadResult();
$url = JRoute::_($url);
// Load by article alias
$query = "SELECT id FROM #__content WHERE alias = ''privacy-policy''";
$db->setQuery($query);
$articleId = (int) $db->loadResult();
$url = JRoute::_("index.php?option=com_content&view=article&id=$articleId");
La forma estándar de hacerlo es aquí: http://docs.joomla.org/Help32:Menus_Menu_Item_Menu_Item_Alias
Simplemente haga un segundo menú con solo Política de privacidad y Cartera y, como tipo de elemento de menú, elija Enlaces del sistema> Elemento de alias de menú. Luego, puede elegir vincularlo al elemento del menú desde el menú que ya creó.
De esta manera, podrá cambiar el enlace del artículo original en cualquier momento y se actualizará todo el alias.
La forma más fácil de lograr esto en 2.5+ es:
$app = JFactory::getApplication();
$menu = $app->getMenu();
$menu_items = $menu->getItems(''menutype'', ''mainmenu'');
Simplemente reemplace ''mainmenu'' con el menutype que desea extraer. Esto equivaldría al nombre del sistema para su menú, el mismo que seleccionaría en el módulo de menú.
Edite en respuesta a la siguiente pregunta de @ betweenbrain: Obtenga el objeto de menú de la misma manera que arriba, luego:
// To get menu items filtered by access level of current user.
$filtered_menu_items = $menu->getItems(null, null);
// To get all menu items, unfiltered.
$all_menu_items = $menu->getMenu();
Para obtener todos los elementos del menú en el backend / administrador de joomla. Probado en Joomla 3.3+
<?php
// Create JApplicationSite instance to get all menu
$site = new JApplicationSite;
$menu = $site->getMenu();
// Get menu items - array filtered by access level of current user. Replace with `getMenu` to get all items or check @don-gilbert''s answer.
$menuItems = $menu->getItems(null, null);
// Build please select option for no itemid
$selectOption = array();
$selectOption[] = JHTML::_(
''select.option'',
'''',
JText::_(''COM_REDSHOP_PLEASE_SELECT''),
''id'',
''title''
);
// Merge items to build select list.
$items = array_merge($selectOption, $menuItems);
// Just print array to understand the structure
echo "<pre>";
print_r($items);
echo "</pre>";
// Or create a select list directly using array.
echo JHtml::_(
''select.genericlist'',
$items,
''menu_item_id'',
'''',
''id'',
''title'',
$this->detail->menu_item_id
);
$app = JFactory::getApplication();
$menu = $app->getMenu();
$items = $menu->getItems(''menutype'', ''mainmenu'');
<?php
$menuitemid = JRequest::getInt( ''Itemid'' );
if ($menuitemid)
{
$menu = JSite::getMenu();
$menuparams = $menu->getParams( $menuitemid );
$params->merge( $menuparams );
}
$propvalue= $params->get(''property_name'');
?>