Як уникнути помилки 404 при встановленні нового розширення


27

Це дуже поширена помилка, яка з’являється в Magento під час встановлення нового розширення з config.xml config:

Коли ви переходите на System->Configuration->Extensionвкладку, відображається помилка 404. Вам потрібно вийти та увійти знову, і тоді це нормально. Але чи є спосіб уникнути цього?


Я не вірю в це, дерево ACL завантажується під час входу та зберігання в сеансі користувачів.
Пітер О'Каллаган

У мене є одна ідея, але я не знаю, чи це можливо. Ви можете змінити поведінку "Magento Connect Manage", щоб закінчити всі сеанси адміністрування після встановлення розширення. Але це неможливо зробити із сфери розширення (((. Тільки з сфери Connect Manager.
oleksii.svarychevskyi

2
Ваше запитання відповіло на моє запитання! Спасибі!
Ян Філіпс

Мені довелося залишити коментар, тому що, як сказав Іан: "Ваше запитання відповіло на моє запитання". Ведення справи зробило трюк!
Ганс Вассінк

Відповіді:


16

Як сказав @Cags, це неможливо (легко) можливо, оскільки дерево ACL завантажується при ініціалізації сеансу (AKA, коли адміністратор входить у систему).
Можливим вирішенням проблеми буде переосмислення _isSectionAllowedметоду в контролері конфігурації системи: ( Mage_Adminhtml_System_ConfigController::_isSectionAllowed) і змусити його перезавантажити дерево ACL.
Щось на зразок:

protected function _isSectionAllowed($section)
{
    $session = Mage::getSingleton('admin/session');
    $session->setAcl(Mage::getResourceModel('admin/acl')->loadAcl());//reload the tree
    return parent::_isSectionAllowed($secntion); //all the code from the original method
}

Але це означає, що дерево ACL буде перезавантажено кожного разу, коли ви отримуєте доступ до розділу конфігурації. Я не бачу сенсу робити це.
Також ви не можете зробити це для одного конкретного розширення. Вам доведеться переписати основний клас.


Можливо, було б краще скинути дерево ACL лише якщо розділ не дозволений. Я, чесно кажучи, ніколи не можу згадати спробу завантаження розділу, який не було дозволено ACL, крім встановлення модуля та перед тим, як адміністратор скасується.
pspahn

Просто божевільна ідея, оскільки я ніколи не пробував її, і я не впевнений, чи доступний сеанс на даний момент, але чи вдасться перезавантажитись із сценарію встановлення? Звичайно, це працює лише в тому випадку, якщо сценарій встановлення викликаний запитом, коли ви як адміністратор увійшли в систему, і це не вплине на інших користувачів, які ввійшли в систему,
Фабіан Шменглер,

2
@fschmengler. Я не пробував цього раніше, але думаю, що це може спрацювати. Бант чесно, я не думаю, що це вартих клопотів.
Маріус

9

Я знайшов шлях із цим із дуже невеликим налаштуванням. Що нам потрібно:

  1. Нова дія контролера, яка перезавантажує ACL (без виходу та входу), а потім перенаправляє назад на попередню сторінку:

    class SSE_AclReload_Adminhtml_Permissions_AclReloadController extends Mage_Adminhtml_Controller_Action
    {
        public function indexAction()
        {
            $session = Mage::getSingleton('admin/session');
            $session->setAcl(Mage::getResourceModel('admin/acl')->loadAcl());
            Mage::getSingleton('adminhtml/session')->addSuccess($this->__('ACL reloaded'));
            $this->_redirectReferer();
        }
    }
  2. Оновлення макета admin_norouteручки. Ми додамо посилання на цю нову дію контролера безпосередньо на сторінці адміністратора 404:

    <layout version="0.1.0">
        <adminhtml_noroute>
            <reference name="content">
                <block type="adminhtml/template" name="content.aclReload" after="content.noRoute" template="sse_aclreload/button.phtml" />
            </reference>
        </adminhtml_noroute>
    </layout>
  3. І шаблон із посиланням:

    <a href="<?php echo $this->getUrl('adminhtml/permissions_aclReload/index'); ?>">
        <?php echo $this->__('Reload ACL'); ?>
    </a>

Я зібрав це разом у невелике розширення на Github: SSE_AclReload (додає посилання також до меню System> Permissions )

Ви також можете спробувати перезавантажити ACL автоматично, як тільки буде відправлено дію адмін / нору, але я вважаю за краще 1) знати, що відбувається, і 2) мати вибір.


1

Якщо у вас є якісь проблеми, коли ви встановлюєте нове розширення та отримуєте сторінку помилки 404, тоді потрібно лише зайти в одне System > Permissions > Roles. Просто збережіть роль і не забудьте очистити var/cacheі var/seesion І ваша проблема була вирішена.


"очистити var / сеанс"? Щоб вийти з усіх клієнтів та випорожнити їхні візки? Ні.
Фабіан Шменглер

ну, просто очистіть сеанс, у папці var
Hiral Unadkat

На жаль, це те саме. За винятком випадків, коли ви не використовуєте обробник файлової сесії. У цьому випадку він нічого не робить, тому що файлів немає
Fabian Schmengler

Тоді вам потрібно зробити, це зайти в System> Permissions> Roles і зберегти роль.
Хірал Унадкат

Що призводить нас до іншої проблеми з вашою відповіддю: навіть якщо це працює, це більше зусиль, ніж вихід із системи та повернення назад, чого ОП хоче уникнути.
Фабіан Шменглер

0

Спробуйте це:

  1. Перейдіть до Адміністратора -> Система -> Кеш керування
  2. Виберіть усі типи кешу
  3. Продовжуйте дію як Оновити та натисніть кнопку Надсилання.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.