Пользовательский URL для расширения magento

1

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

В соответствии с настройками "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-адрес на вкладке system/settings на панели администратора

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

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

Как насчет шаблона content & root, а также в layout/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 из настроек

Теги:
magento
admin

1 ответ

0
Лучший ответ

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

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

etc/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>

Model/Observer.php (Сохранить URL-адрес перезаписи) (EDITED)

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 (перенаправляет, если нет идентификатора...) (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 } ?>

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню