Как настроить внешний вид административного элемента управления раздела настроек?

[10 ноября 2016 г.]    Российская сборка Magento 2.49.12
Magento 2: модули и услуги
#1 Ярослав Богуцкий 2
  • Группа: Пользователь
  • Сообщений: 75
  • Регистрация: 07.07.2011

09.07.2011 11:00

Ещё вопросик. Бьюсь с <frontend_model>. Как я понял, можно изменять вывод содержимого на странице настройки, иногда нужно или ссылочку вставить, или картинку, а не только поля для заполнения. Вот как у того же PayPal
<frontend_model>paypal/adminhtml_system_config_fieldset_hint</frontend_model>

Я е могу понять, как правильно прописать путь для своего модуля. Попытался сделать как в PayPal:
<frontend_model>mailer/adminhtml_system_config_fieldset_hint</frontend_model>

Ошибка
Fatal error: Class 'Mage_Mailer_Block_Adminhtml_System_Config_Fieldset_Hint' not found in F:\HOST\magento.ru\app\code\core\Mage\Core\Model\Layout.php on line 564 

Файл Mailer\Block\Adminhtml\System\Config\Fieldset\Hint.php
<?php

class Mynamespace_Mailer_Block_Adminhtml_System_Config_Fieldset_Hint
    extends Mage_Adminhtml_Block_Abstract
    implements Varien_Data_Form_Element_Renderer_Interface
{
    protected $_template = 'mailer/system/config/fieldset/hint.phtml';

    public function render(Varien_Data_Form_Element_Abstract $element)
    {
        return $this->toHtml();
    }
}


Файл app\design\adminhtml\default\default\template\mailer\system\config\fieldset\hint.phtml
<?php

<div class="paypal-payment-notice">
</div>


Вроде все есть, вот только бы заставить это работать....

#2 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8884
  • Регистрация: 20.02.2010

09.07.2011 11:01

Вы второй раз забываете указать пространство имён модуля.
Надо писать не mailer, а namespace_mailer.
Mage - пространство имён по умолчанию, используется, когда программист не указал своё.

#3 Ярослав Богуцкий 2
  • Группа: Пользователь
  • Сообщений: 75
  • Регистрация: 07.07.2011

09.07.2011 11:09

Т.е. <frontend_model>mynamespace_mailer/adminhtml_system_config_fieldset_hint</frontend_model>? Это второе что я сделал, однако
Fatal error: Class 'Mage_Mynamespace_Mailer_Block_Adminhtml_System_Config_Fieldset_Hint' not found in F:\HOST\magento.ru\app\code\core\Mage\Core\Model\Layout.php on line 564


#4 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8884
  • Регистрация: 20.02.2010

09.07.2011 11:12

Определяли ли вы приставку mynamespace_mailer для моделей в файле config.xml?

#5 Ярослав Богуцкий 2
  • Группа: Пользователь
  • Сообщений: 75
  • Регистрация: 07.07.2011

09.07.2011 11:24

        <models>
            <mailer>
                <class>Mynamespace_Mailer_Model</class>
            </mailer>
        </models>


#6 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8884
  • Регистрация: 20.02.2010

09.07.2011 11:34

Вы в третий раз забываете указать пространство имён для модуля. См. выше.

#7 Ярослав Богуцкий 2
  • Группа: Пользователь
  • Сообщений: 75
  • Регистрация: 07.07.2011

09.07.2011 11:52

        <models>
            <Mynamespace_Mailer>
                <class>Mynamespace_Mailer_Model</class>
            </Mynamespace_Mailer>
        </models>

Результат тот же. :(

#8 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8884
  • Регистрация: 20.02.2010

09.07.2011 11:56

mynamespace_mailer напишите строчными буквами

#9 Ярослав Богуцкий 2
  • Группа: Пользователь
  • Сообщений: 75
  • Регистрация: 07.07.2011

09.07.2011 12:06

        <models>
            <Mynamespace_Mailer>
                <class>Mynamespace_Mailer_Model</class>
            </Mynamespace_Mailer>
        </models>

        <models>
            <mynamespace_mailer>
                <class>Mynamespace_Mailer_Model</class>
            </mynamespace_mailer>
        </models>

        <models>
            <mynamespace_mailer>
                <class>mynamespace_mailer_Model</class>
            </mynamespace_mailer>
        </models>

Везде результат аналогичен, пытается искать в Mage_Mynamespace_Mailer. Врядли проблема в строчных или прописных буквах, так как
        <helpers>
            <Mynamespace_Mailer>
                <class>Mynamespace_Mailer_Helper</class>
            </Mynamespace_Mailer>
        </helpers>

работает корректно.

#10 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8884
  • Регистрация: 20.02.2010

09.07.2011 12:15

Я всегда пишу так, и у меня это работает:
<models>
    <mynamespace_mailer>
        <class>Mynamespace_Mailer_Model</class>
    </mynamespace_mailer>
</models>


Вообще, в качестве примера вы можете посмотреть модуль Df_Admin Российской сборки, там я использую свои frontend model.

#11 Ярослав Богуцкий 2
  • Группа: Пользователь
  • Сообщений: 75
  • Регистрация: 07.07.2011

09.07.2011 15:00

magento сложная система, да и занимаюсь я относительно недавно ею. Мне бы бесплатный модуль с frontend_model, чтобы хотя бы по аналогии сделать.

#12 Ярослав Богуцкий 2
  • Группа: Пользователь
  • Сообщений: 75
  • Регистрация: 07.07.2011

09.07.2011 17:01

Всё, прошу прощения, это я забыл добавить
		<blocks>
			<mynamespace_mailer>
				<class>Mynamespace_Mailer_Block</class>
			</mynamespace_mailer>
		</blocks>

в config.xml, поэтому и было столько проблем.

#13 Ярослав Богуцкий 2
  • Группа: Пользователь
  • Сообщений: 75
  • Регистрация: 07.07.2011

09.07.2011 18:38

А если я хочу продублировать кнопку "Save config" под таблицей параметров можно ли как то получить и вывести данную кнопку? Я уже попробовал вставить код кнопки
<button type="button" class="scalable save" onclick="configForm.submit()" style=""><span>Save Config</span></button>

но думаю это на крайний случай. Должны же быть какие-то методы доступа к стандартным элементам управления.

#14 Ярослав Богуцкий 2
  • Группа: Пользователь
  • Сообщений: 75
  • Регистрация: 07.07.2011

09.07.2011 22:33

Предыдущий вопрос решился следующим образом:
создаем новую группу с использованием вышеупомянутого frontend_model, в файле Mailer\Block\System\Config\Footer.php пишем следующее
<?php

class Mynamespace_Mailer_Block_System_Config_Footer
    extends Mage_Adminhtml_Block_Abstract
    implements Varien_Data_Form_Element_Renderer_Interface
{
    protected $_template = 'mynamespace/mailer/system/config/footer.phtml';
    protected function _prepareLayout()
    {
        $this->setChild('save_button',
            $this->getLayout()->createBlock('adminhtml/widget_button')
                ->setData(array(
                    'label'     => Mage::helper('adminhtml')->__('Save Config'),
                    'onclick'   => 'configForm.submit()',
                    'class' => 'save',
                ))
        );
        return parent::_prepareLayout();
    }
    public function getSaveButtonHtml()
    {
        return $this->getChildHtml('save_button');
    }
    public function render(Varien_Data_Form_Element_Abstract $element)
    {
        return $this->toHtml();
    }
}

и в файле mynamespace/mailer/system/config/footer.phtml выводим кнопочку
<div align="right">
	<?php echo $this->getSaveButtonHtml(); ?>	
</div>


Поделиться темой: