2015-07-07 3 views
1

Я создаю расширение magento, для которого потребуется настраиваемый URL-адрес интерфейса, который устанавливается с помощью настройки конфигурации панели администратора для расширения.Пользовательский URL-адрес для расширения magento

В соответствии с настройками «set admin url» в системных настройках (которые также могут быть установлены в файле app/etc/local.xml).

в основном у меня есть в моем файле config.xml

<frontend> 
    <routers> 
     <extensionname> 
      <use>standard</use> 
      <args> 
       <module>My_Extensionname</module> 
       <frontName>extensionname</frontName> 
      </args> 
     </extensionname> 
    </routers> 
</frontend> 

Это создает URL-адрес site.com/extensionname

Но я хочу, чтобы иметь возможность установить URL на вкладке Система/настройки в панель администратора

Я просмотрел основной код и увидел проблески кода, который делает (а модель predispatch контроллеры и т.д. я думаю) это для администратора URL по умолчанию настройки ключа в

Как я могу это сделать? Могу ли я создать наблюдателя, чтобы поймать запрос на URL? или настройки наблюдателя изменяются и программно создают переписывание URL?

Что касается контента & Корневой шаблон также в макете/extensionname.xml?

<layout version="0.1.0"> 
<extensionname_index> 
<reference name="root"> 
     <action method="setTemplate"><template>extensionname/page.phtml</template></action> 
    </reference> 
    <reference name="content"> 
     <block type="extensionname/extensionname" name="extensionname" template="extensionname/extensionname.phtml" /> 
    </reference> 
</extensionname_index> 

бы это все еще можно использовать, хотя я бы использовать пользовательский URL из параметров

ответ

0

Ok не мог получить любой из вышеперечисленных информации (ссылки) для работы с моей стороны (в отношении использования настраиваемых маршрутизаторов и т. д.), потому что я думаю, что мое расширение не использует какие-либо коллекции из базы данных, поскольку это просто целевая страница, поэтому не имеет значений индекса/индекса/идентификатора и т. д.

Так что пошел с грязным взломом работа на данный момент. Смотри ниже.

и т.д./config.xml (событие наблюдателя при настройке администратора полей сохранена)

<config> 
... 
<frontend> 
<routers> 
     <myextension> 
      <use>standard</use> 
      <args> 
       <module>Mycompany_Myextension</module> 
       <frontName>myextension</frontName> 
      </args> 
     </myextension> 
    </routers> 
... 
</frontend> 
<global> 
... 
<events> 
<admin_system_config_changed_section_myextension> 
<observers> 
    <myextension> 
     <type>singleton</type> 
     <class>myextension/observer</class> 
     <method>observersave</method> 
    </myextension> 
</observers> 
</admin_system_config_changed_section_myextension> 
</events> 
... 
</global> 
</config> 

Модели/Observer.php (Сохранение URL Rewrite) (отредактированного)

public function observersave(Varien_Event_Observer $observer) 
{ 

    #remove the old urlrewrite 
    $url = Mage::getStoreConfig('myextension/general/url'); 
    $uldURLCollection = Mage::getModel('core/url_rewrite')->getResourceCollection(); 
    $uldURLCollection->getSelect() 
    ->where('id_path=?', 'myextension');//EDIT: so overwrites on each save 

    $uldURLCollection->setPageSize(1)->load(); 

    if ($uldURLCollection->count() > 0) { 
    $uldURLCollection->getFirstItem()->delete(); 
    } 

    #add url rewrite 
    $modelURLRewrite = Mage::getModel('core/url_rewrite'); 

    $modelURLRewrite->setIdPath('myextension/'.strtolower($url)) 
    ->setTargetPath('myextension/index/index/id/'.$url.'') 
    ->setOptions('') 
    ->setDescription('New URL - Created as a new setting was saved') 
    ->setRequestPath('myextension/url/'.$url.'');//EDIT: added extra rewrite url paths so rewrite can never conflict if admin setting field is set to a "key default url" like "admin" or "checkout" or "contacts" etc 

    $modelURLRewrite->save(); 
} 

контроллеры/IndexController.php (перенаправляет, если нет ID ...) (EDITED)

public function preDispatch() 
{ 

    //$url = Mage::getStoreConfig('myextension/general/url'); 
    if (!strstr($this->getRequest()->getRequestUri(), 'myextension/index/index/id')) { 
     parent::preDispatch(); 
    } 

} 


public function indexAction() 
{ 
    $url = Mage::getStoreConfig('myextension/general/url'); 
    if (trim($this->getRequest()->getParam('id')) == '' ) { 
     $this->_redirect('/');//Edit: changed redirect to root 

    } else { 

     $id = $this->getRequest()->getParam('id'); 
     if($id == $url) { 
     $this->loadLayout(array(
         'default', 
         'myextension_index_index' 
     ));//EDIT: added if statement to see if myextension/index/index/id matched admin setting, if not redirect to root 

     $this->renderLayout(); 
     }else{ 
     $this->_redirect('/');//Edit: changed redirect to root 
     } 
    } 

} 

поэтому на данный момент у меня есть URL-адресу: (Edited)

site.com/myextension/url/myadminfieldvalue

&

site.com/myextension/index/index/id/myadminfieldvalue

(EDITED) , но в шаблоне/myextension/myextension.PHTML

<?php if($current_url == ''.$base_url.'myextension/index/index'){ ?> 
<p>Disabled cause i dont really want info at this url..</p> 
<?php }else{ ?> 
<p>show data because your accessing myextension/index/index via the rewrite /myextension/url/myadminfieldvalue.</p> 
<?php } ?> 

Немного больше работы требуется, чтобы достичь того, чего я хочу, но сейчас он работает для меня, и надеюсь, что другие могут найти это полезным.

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