2015-04-03 2 views
1

Я работаю над модулем, где я создал одно меню в Magento admin, используя adminhtml.xml.Как установить внешнюю ссылку URL-адреса в меню администратора Magento

Теперь я хочу связать одно из меню с внешним URL-адресом и установить target="blank". Но я не уверен, как это сделать в adminhtml.xml. Вот мой код.

<?xml version="1.0"?> 
<config> 
    <menu> 
     <system> 
      <children> 
       <convert translate="title"> 
        <children> 
         <importmagmi translate="title" module="importexport"> 
          <title>MagMi Importer</title> 
          <action><url helper="https://externalurl.com"/></action> 
          <sort_order>100</sort_order> 
         </importmagmi> 
        </children> 
       </convert> 
      </children> 
     </system> 
    </menu> 
</config> 

Когда я проверяю его добавление текущего доменного имени перед внешним URL. ex: http://mydomainname.com/https://externalurl.com

Мне интересно, как установить только внешний URL?

ответ

3

Внутри <action> тег вы можете положить module/controller/action вашего модуля.

Затем создать это действие, и положить что-то вроде этого:

public function locationAction() 
{ 
    $this->_redirectUrl('http://www.example.com/'); 
} 

См Mage_Core_Controller_Varien_Action::_redirectUrl для стандартной реализации редиректа в Magento действия контроллера.

1

К сожалению, это невозможно сделать из коробки. Для этого вам придется переопределить класс Mage_Adminhtml_Block_Page_Menu.

Я хотел бы предложить, чтобы изменить метод _buildMenuArray для поддержки «external_url» вариант конфигурации в adminhtml.xml как так

if($child->external_url) { 
    $menuArr['url'] = (string)$child->external_url; 
    $menuArr['is_external'] = true; 
} 
elseif ($child->action) { 
    $menuArr['url'] = $this->_url->getUrl((string)$child->action, array('_cache_secret_key' => true)); 
} else { 
    $menuArr['url'] = '#'; 
    $menuArr['click'] = 'return false'; 
} 

и getMenuLevel метод соответственно

$html .= '<li ' . (!empty($item['children']) ? 'onmouseover="Element.addClassName(this,\'over\')" ' 
      . 'onmouseout="Element.removeClassName(this,\'over\')"' : '') . ' class="' 
      . (!$level && !empty($item['active']) ? ' active' : '') . ' ' 
      . (!empty($item['children']) ? ' parent' : '') 
      . (!empty($level) && !empty($item['last']) ? ' last' : '') 
      . ' level' . $level . '"> <a ' . ($item['is_external'] ? 'target="_blank" ' : '') . 'href="' . $item['url'] . '" ' 
      . (!empty($item['title']) ? 'title="' . $item['title'] . '"' : '') . ' ' 
      . (!empty($item['click']) ? 'onclick="' . $item['click'] . '"' : '') . ' class="' 
      . ($level === 0 && !empty($item['active']) ? 'active' : '') . '"><span>' 
      . $this->escapeHtml($item['label']) . '</span></a>' . PHP_EOL; 

Затем вы можете добавить ваша конфигурация

<?xml version="1.0"?> 
<config> 
    <menu> 
     <system> 
      <children> 
       <convert translate="title"> 
        <children> 
         <importmagmi translate="title" module="importexport"> 
          <title>MagMi Importer</title> 
          <external_url>https://externalurl.com</external_url>        <sort_order>100</sort_order> 
         </importmagmi> 
        </children> 
       </convert> 
      </children> 
     </system> 
    </menu> 
</config> 

Запомнить перепишите класс и не изменяйте основной класс.

+1

Запрет класса переопределяет как можно больше. – hakre

+0

Вы правы, конечно, следует избегать перезаписи классов, когда это возможно. В этом случае это невозможно, потому что это единственный способ сделать ссылку открытой в новом окне ('target = '_blank'') по запросу в исходном вопросе. – Rinda

-1
<?php 
$url = 'http://example.com'; 
$this->_redirectUrl('http://example.com'); 

Mage::app()->getResponse()->setRedirect($url)->sendResponse(); 

Mage::app()->getFrontController()->getResponse()->setRedirect($url)->sendResponse(); 
?> 
+0

Любое введение на ваш ответ, может быть? просто для публикации кода не является информативным – Farside

Смежные вопросы