Domanda

Sto ricevendo una pausa mentale perché non riesco a rendere il mio modulo personalizzato che dovrebbe riscrivere 2 blocchi e 1 lavoro del modello. Il mio modulo è caricato - ho controllato in Pannello di amministrazione System->Configuration->Advanced ma Magento legge ancora i file core. Più storto, sto cercando di riscrivere le recensioni del modulo così quando sono in Amministratore Panel Guardando le recensioni e fai un errore intenzionale nel nome della classe in Acme_Reviewed_Block_Adminhtml_Review_Edit_Form ottengo lo schermo vuoto, quindi sembra che sta leggendo i miei blocchi e modelli.Forse ho fatto un errore da qualche parte che non riesco a trovare.

config.xml

<config>
  <modules>
    <Acme_Reviewed>
      <version>1.0</version>
    </Acme_Reviewed>
  </modules>
  <global>
    <models>
        <reviewed>
            <class>Acme_Reviewed_Model</class>
        </reviewed>
        <review>
            <rewrite>
                <resource_review>Acme_Reviewed_Model_Resource_Review</resource_review>
            </rewrite>
        </review>
    </models>
    <blocks>
        <reviewed>
            <class>Acme_Reviewed_Block</class>
        </reviewed>
        <ajaxreviews>
            <rewrite>
                <reviews>Acme_Reviewed_Block_Reviews</reviews>
            </rewrite>
        </ajaxreviews>
        <adminhtml>
            <rewrite>
                <review_edit_form>Acme_Reviewed_Block_Adminhtml_Review_Edit_Form</review_edit_form>
            </rewrite>
        </adminhtml>
    </blocks>
  </global>
</config>
.

acme_reviewed.xml

<config>
  <modules>
    <Acme_Reviewed>
        <active>true</active>
        <codePool>local</codePool>
        <depends>
            <Mage_Adminhtml />
            <Mage_Review />
            <Magpleasure_Ajaxreviews />
        </depends>
    </Acme_Reviewed>
  </modules>
</config>
.

Provo a scavalcare:

Mage/Review/Model/Resource/Review.php
Magpleasure/Ajaxreviews/Block/Reviews.php
Mage/Adminhtml/Block/Review/Edit/Form.php
.

Con i miei file:

Acme/Reviewed/Model/Resource/Review.php
Acme/Reviewed/Block/Reviews.php
Acme/Reviewed/Block/Adminhtml/Review/Edit/Form.php
.

acme / rivisto / modello / risorsa / revisione.php

<?php

class Acme_Reviewed_Model_Resource_Review extends Mage_Review_Model_Resource_Review
{
    protected function _afterSave(Mage_Core_Model_Abstract $object)
    {
        $adapter = $this->_getWriteAdapter();
        /**
         * save detail
         */
        Mage::log(var_export($object->getGemail(), TRUE), null, 'furoris.log');
        $detail = array(
            'title'     => $object->getTitle(),
            'detail'    => $object->getDetail(),
            'nickname'  => $object->getNickname(),
            'gemail' => $object->getGemail(),
        );
        $select = $adapter->select()
            ->from($this->_reviewDetailTable, 'detail_id')
            ->where('review_id = :review_id');
        $detailId = $adapter->fetchOne($select, array(':review_id' => $object->getId()));

        if ($detailId) {
            $condition = array("detail_id = ?" => $detailId);
            Mage::log("a", null, 'furoris.log');
            $adapter->update($this->_reviewDetailTable, $detail, $condition);
            Mage::log("b", null, 'furoris.log');
        } else {
            Mage::log($this->_reviewDetailTable, null, 'furoris.log');
            $detail['store_id']   = $object->getStoreId();
            $detail['customer_id']= $object->getCustomerId();
            $detail['review_id']  = $object->getId();
            $detail['gemail'] = $object->getGemail();
            $adapter->insert($this->_reviewDetailTable, $detail);
        }


        /**
         * save stores
         */
        $stores = $object->getStores();
        if (!empty($stores)) {
            $condition = array('review_id = ?' => $object->getId());
            $adapter->delete($this->_reviewStoreTable, $condition);

            $insertedStoreIds = array();
            foreach ($stores as $storeId) {
                if (in_array($storeId, $insertedStoreIds)) {
                    continue;
                }

                $insertedStoreIds[] = $storeId;
                $storeInsert = array(
                    'store_id' => $storeId,
                    'review_id'=> $object->getId()
                );
                $adapter->insert($this->_reviewStoreTable, $storeInsert);
            }
        }

        // reaggregate ratings, that depend on this review
        $this->_aggregateRatings(
            $this->_loadVotedRatingIds($object->getId()),
            $object->getEntityPkValue()
        );

        return $this;
    }
}
.

acme_reviewed_block_reviews

<?php

class Acme_Reviewed_Block_Reviews extends Magpleasure_Ajaxreviews_Block_Reviews
{
    public function getTemplateHtml()
    {    
        /** @var Magpleasure_Common_Block_Template $block */
        $block = $this->getLayout()->createBlock('magpleasure/template');
        if ($block) {
            return $block->setTemplate('ajaxreviews/product/view/list/template-guest.phtml')->toHtml();
        }
    }
}
.

acme / rivisto / blocco / adminhtml / review / modifica / form.php

<?php

class Acme_Reviewed_Block_Adminhtml_Review_Edit_Form extends Mage_Adminhtml_Block_Review_Edit_Form
{
    protected function _prepareForm()
    {
        $review = Mage::registry('review_data');
        $product = Mage::getModel('catalog/product')->load($review->getEntityPkValue());
        $customer = Mage::getModel('customer/customer')->load($review->getCustomerId());
        $form = new Varien_Data_Form(array(
            'id'        => 'edit_form',
            'action'    => $this->getUrl('*/*/save', array('id' => $this->getRequest()->getParam('id'), 'ret' => Mage::registry('ret'))),
            'method'    => 'post'
        ));

        $fieldset = $form->addFieldset('review_details', array('legend' => Mage::helper('review')->__('Review Details'), 'class' => 'fieldset-wide'));

        $fieldset->addField('product_name', 'note', array(
            'label'     => Mage::helper('review')->__('Product'),
            'text'      => '<a href="' . $this->getUrl('*/catalog_product/edit', array('id' => $product->getId())) . '" onclick="this.target=\'blank\'">' . $product->getName() . '</a>'
        ));

        if ($customer->getId()) {
            $customerText = Mage::helper('review')->__('<a href="%1$s" onclick="this.target=\'blank\'">%2$s %3$s</a> <a href="mailto:%4$s">(%4$s)</a>', $this->getUrl('*/customer/edit', array('id' => $customer->getId(), 'active_tab'=>'review')), $this->escapeHtml($customer->getFirstname()), $this->escapeHtml($customer->getLastname()), $this->escapeHtml($customer->getEmail()));
        } else {
            if (is_null($review->getCustomerId())) {
                $customerText = Mage::helper('review')->__($review->getGemail());
            } elseif ($review->getCustomerId() == 0) {
                $customerText = Mage::helper('review')->__('Administrator');
            }
        }

        $fieldset->addField('customer', 'note', array(
            'label'     => Mage::helper('review')->__('Posted By'),
            'text'      => $customerText,
        ));

        $fieldset->addField('summary_rating', 'note', array(
            'label'     => Mage::helper('review')->__('Summary Rating'),
            'text'      => $this->getLayout()->createBlock('adminhtml/review_rating_summary')->toHtml(),
        ));

        $fieldset->addField('detailed_rating', 'note', array(
            'label'     => Mage::helper('review')->__('Detailed Rating'),
            'required'  => true,
            'text'      => '<div id="rating_detail">'
                           . $this->getLayout()->createBlock('adminhtml/review_rating_detailed')->toHtml()
                           . '</div>',
        ));

        $fieldset->addField('status_id', 'select', array(
            'label'     => Mage::helper('review')->__('Status'),
            'required'  => true,
            'name'      => 'status_id',
            'values'    => Mage::helper('review')->getReviewStatusesOptionArray(),
        ));

        /**
         * Check is single store mode
         */
        if (!Mage::app()->isSingleStoreMode()) {
            $field = $fieldset->addField('select_stores', 'multiselect', array(
                'label'     => Mage::helper('review')->__('Visible In'),
                'required'  => true,
                'name'      => 'stores[]',
                'values'    => Mage::getSingleton('adminhtml/system_store')->getStoreValuesForForm(),
            ));
            $renderer = $this->getLayout()->createBlock('adminhtml/store_switcher_form_renderer_fieldset_element');
            $field->setRenderer($renderer);
            $review->setSelectStores($review->getStores());
        }
        else {
            $fieldset->addField('select_stores', 'hidden', array(
                'name'      => 'stores[]',
                'value'     => Mage::app()->getStore(true)->getId()
            ));
            $review->setSelectStores(Mage::app()->getStore(true)->getId());
        }

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

        $fieldset->addField('title', 'text', array(
            'label'     => Mage::helper('review')->__('Summary of Review'),
            'required'  => true,
            'name'      => 'title',
        ));

        $fieldset->addField('detail', 'textarea', array(
            'label'     => Mage::helper('review')->__('Review'),
            'required'  => true,
            'name'      => 'detail',
            'style'     => 'height:24em;',
        ));

        $form->setUseContainer(true);
        $form->setValues($review->getData());
        $this->setForm($form);
        return parent::_prepareForm();
    }
}
.

È stato utile?

Soluzione

Infine, ho risolto questo indovinello. Il mio codice è ESEMPIO Quante trappole in attesa di sviluppatori inesperti. Ho fatto 3 errori.

    .
  1. Acme / rivisto / blocco / adminhtml / recensione / modifica / form.php
  2. L'intero codice di funzione estesa viene prelevato dal file principale mage_adminhtml_block_review_edit_form che si estenderò. Ho appena aggiunto un semplice cambiamento. Quindi alla fine della funzione è la linea:

    .

    Padre di ritorno :: _ PREPATEFORM ();

    Ma il problema è mage_adminhtml_block_review_edit_form che prolunga anche estende anche altri file mage_adminhtml_block_widget_form.

    SO nel mio file 'genitore' significa mage_adminhtml_block_review_edit_form ma nel core è in attesa di ritorno mage_adminhtml_block_widget_form

    Ho dovuto cambiare questa linea in questo e funziona perfetti:

    .

    return mage_adminhtml_block_widget_form :: _ preteform ();

    1. Acme / rivisto / modello / risorsa / revisione / revisione.php
    2. Ho scritto bene la configurazione, ma per estendere il modello, non per estendere la risorsa del modello. Quindi quando ho cambiato config.xml sul codice sotto di cui funziona bene anche.

      <review_resource>
          <rewrite>
              <review>Acme_Reviewed_Model_Resource_Review</resource_review>
          </rewrite>
      </review_resource>
      
      .

      1. acme_reviewed_block_reviews
      2. Quindi qui volevo estendere la funzione che si trovava a MagliPeasure_ajaxReviews_Block_reviews_Block_reviews, ma non ho notato che non è la fine della "catena di estensione". Ho trovato che l'ultimo file che si estende magplasure_ajaxreviews_block_reviews_blocks è maglisure_ajaxreviews_block_placing_additional, quindi ho dovuto estendere questa classe con la mia funzione modificata.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top