Frage an magento, magento-1.5 – Fügen Sie benutzerdefinierte Felder im Überprüfungsformular hinzu

1

Ich freue mich darauf, ein benutzerdefiniertes Feld "E-Mail-ID" und ein Dropdown-Feld im Überprüfungsformular zu erstellen.

Ich habe es versucht, aber nicht die Daten gespeichert, sondern nur die Felder

app \ code \ core \ Mage \ Review \ Model \ Mysql4 \ Review.php

<code>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
);
</code>

Fügen Sie nun eine E-Mail hinzu, und wählen Sie in der Tabelle review_detail in der Datenbank app \ code \ core \ Mage \ Adminhtml \ Block \ Review \ Edit \ Form.php. Fügen Sie außerdem Folgendes hinzu:

<code>$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'
));
</code>

vor zu

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

Deine Antwort

2   die antwort
6

was in Zukunft schwierig sein wird, die Magento-Core-Klasse zu aktualisieren. Sie können die spezifische Klasse durch Ihr eigenes benutzerdefiniertes Modul überschreiben (siehe Modulersteller, wenn Sie ein Modul einrichten möchten).

Fügen Sie in der config.xml des Moduls die Modelle hinzu, die Sie wie folgt umschreiben:

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

Die angegebene Klasse geht von der Magento-Kernklasse aus, die Sie überschreiben möchten:

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

Ps. So fügen Sie das neue Feld der Tabelle magento review_detail hinzu:

<code>$installer = $this;
$installer->startSetup();
$installer->run("ALTER TABLE review_detail ADD COLUMN email VARCHAR(255) NULL");
$installer->endSetup();
</code>
was soll ich statt verwenden<review> eine andere Klasse zu überschreiben? Mr_Green
2

app \ code \ core \ Mage \ Review \ Model \ Resource \ Review.php

Sie finden diesen Code in der Zeile ungefähr 150

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

Fügen Sie die beiden neuen Felder hinzu, die Sie hinzufügen möchten.

<code>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
);
</code>

Das ist es nicht mehr .... :) Fröhliches Programmieren

-1: Änderung der Kerndatei anshuman
Genau wie Anshuman sagte, benutze dies niemals als Lösung. Das Bearbeiten von Core-Dateien ist eine sehr schlechte Praxis und wird bei Magento-Updates zu Problemen führen. David Kooijman
Dies fügt ein benutzerdefiniertes Feld hinzu, aber wenn das übermittelte Formular nicht in der Datenbank gespeichert wird :( Mr_Green

Verwandte Fragen