Добавить настраиваемые поля в форму отзыва

Я с нетерпением жду возможности создать настраиваемые поля «Идентификатор электронной почты» и один раскрывающийся список в форме обзора.

Я пробовал это, но не сохранял данные, это были только поля

приложение\код\ядро\Mage\Обзор\Модель\Mysql4\Review.php

protected function _afterSave(Mage_Core_Model_Abstract $object)
{
$detail = array(
'title' => $object->getTitle(),
'detail' => $object->getDetail(),
'nickname' => $object->getNickname(),
'email' => $object->getEmail(), // New field 1
'fname' => $object->getFname(), // New field 2
);

Теперь добавьте адрес электронной почты, fname в таблицу review_detail в базе данных, также перейдите в app\code\core\Mage\Adminhtml\Block\Review\Edit\Form.php и добавьте:

$fieldset->addField('fname', 'text', array( // New field 2
'label' => Mage::helper('review')->__('First Name'),
'required' => true,
'name' => 'fname'
));

$fieldset->addField('email', 'text', array( // New field 1
'label' => Mage::helper('review')->__('Email'),
'required' => true,
'name' => 'email'
));

прежде чем

$fieldset->addField('nickname', 'text', array(
'label' => Mage::helper('review')->__('Nickname'),
'required' => true,
'name' => 'nickname'
));

person Ajay Patel    schedule 10.04.2012    source источник


Ответы (2)


Модифицировать основной класс Mage немного страшно, и в будущем будет сложно обновить основной класс magento. Вы можете переопределить определенный класс своим собственным модулем (см. Создатель модуля, если вы хотите его настроить)

config.xml модуля, добавьте модели, переписанные, как показано ниже:

<global>
    <models>
        <review_mysql4>
            <rewrite>
                <review>[[Your Company]]_[[Your Module]]_Model_Review</review>
            </rewrite>
        </review_mysql4>
    </models>
    ...
</global>

И указанный класс будет расширяться из основного класса Magento, который вы хотите переопределить:

class [[Your Company]]_[[Your Module]]_Model_Review
    extends Mage_Review_Model_Mysql4_Review
{
    protected function _afterSave(Mage_Core_Model_Abstract $object)
    {
     .... 
    }
}

Пс. чтобы добавить новое поле в таблицу magento review_detail:

$installer = $this;
$installer->startSetup();
$installer->run("ALTER TABLE review_detail ADD COLUMN email VARCHAR(255) NULL");
$installer->endSetup();
person Zeno Yu    schedule 04.10.2012
comment
что я должен использовать вместо <review>, чтобы переопределить какой-то другой класс? - person Mr_Green; 21.11.2013

Наконец-то я решил эту проблему... Откройте app\code\core\Mage\Review\Model\Resource\Review.php

вы найдете этот код в строке около 150

protected function _afterSave(Mage_Core_Model_Abstract $object)
{
$detail = array(
'title' => $object->getTitle(),
'detail' => $object->getDetail(),
'nickname' => $object->getNickname(),
);

Добавьте два новых поля, которые вы хотите добавить.

protected function _afterSave(Mage_Core_Model_Abstract $object)
{
$detail = array(
'title' => $object->getTitle(),
'detail' => $object->getDetail(),
'nickname' => $object->getNickname(),
'email' => $object->getEmail(), // New field 1
'fname' => $object->getFname(), // New field 2
);

Этого больше нет.... :) Удачного кодирования

person Ajay Patel    schedule 10.04.2012
comment
Это добавление настраиваемого поля, но когда отправленная форма не сохраняется в базе данных :( - person Mr_Green; 05.12.2013
comment
Как сказал анхуман, никогда не используйте это как решение. Редактирование основных файлов - действительно плохая практика, и ее будет сложно решить во время обновлений magento. - person David Kooijman; 03.05.2016