it-swarm-pt.tech

Como obter itens de menu específicos do joomla?

Esta questão é um pouco específica para o Joomla.

Eu tenho um menu principal que consiste em:

Página inicial | Sobre nós | Política de privacidade | Portfólio | Contatos EUA.

Cada item de menu está vinculado a um artigo.

Agora, no site completo, há muitos lugares nos componentes e módulos nos quais preciso mostrar dois links: Política de Privacidade e Portfólio.

Alguém pode me guiar? Não quero codificar os links, pois o ID do item será diferente na produção.

18
jtanmay

Existem duas maneiras de fazer isso:

Opção 1:

O Joomla carrega menus toda vez que a página é carregada. Você pode acessar os menus chamando os seguintes 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);

Esse método é mais rápido porque você não precisa consultar o banco de dados. Operação simples na memória.

Opção 2:

Obtenha do banco de dados. Obtenha o link do menu de jos_menu com base em alias ou algo assim, ou obtenha o artigo # de jos_content por alias do artigo, crie o link

$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");
32
Alex

A maneira mais fácil de fazer isso no 2.5+ é:

$app = JFactory::getApplication();
$menu = $app->getMenu();
$menu_items = $menu->getItems('menutype', 'mainmenu');

Apenas substitua 'mainmenu' pelo menutype que você deseja extrair. Isso equivaleria ao nome do sistema para o seu menu, o mesmo que você selecionaria no módulo de menu.

Edite em resposta à pergunta do @ betweenbrain abaixo: Obtenha o objeto de menu da mesma maneira que acima, então:

// 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();
16
Don Gilbert

No Joomla, há uma opção para vincular a qualquer menu com uma opção de hiperlink específica. Na estrutura do menu de back-end onde você coloca o link do artigo, a partir daí você pode selecionar outro link também.

2
roy712

A maneira padrão de fazer isso é aqui: http://docs.joomla.org/Help32:Menus_Menu_Item_Menu_Item_Alias

Basta criar um segundo menu apenas com Política de Privacidade e Portfólio e, como tipo de item de menu, escolha Links do Sistema> Item de Alias ​​de Menu. Em seguida, você pode optar por vinculá-lo ao item de menu já criado.

Dessa forma, você poderá alterar o link do artigo original a qualquer momento e todos os alias serão atualizados.

1
tristanbailey
<?php

$menuitemid = JRequest::getInt( 'Itemid' );
if ($menuitemid)
{
    $menu = JSite::getMenu();
    $menuparams = $menu->getParams( $menuitemid );
    $params->merge( $menuparams );
}

$propvalue= $params->get('property_name');

?>
0
ursitesion

Eu acho que você deve criar um novo menu no joomla e, em seguida, criar aliases como itens de menu, faça isso para garantir que você não obtenha problemas de conteúdo duplicado. Acho que a resposta do Alex é boa se você quiser fazer isso com código, mas é mais difícil de manter e alguém entender quem aparece. Como é um item de menu, ele não pertence a um componente ou módulo na minha opinião.

0
landed

Não é mais fácil criar um novo menu contendo dois apelidos para os menus desejados e carregá-los em qualquer lugar do site usando {loadposition} como queiras?

0
Ahmad Alfy

Para obter todos os itens de menu no joomla backend/administrator. Testado no 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
);
0
Gunjan Patel