Non è possibile effettuare il blocco e il modello di riscrittura di funzionamento
-
29-09-2020 - |
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();
}
}
. Soluzione
Infine, ho risolto questo indovinello. Il mio codice è ESEMPIO Quante trappole in attesa di sviluppatori inesperti. Ho fatto 3 errori.
- .
- Acme / rivisto / blocco / adminhtml / recensione / modifica / form.php
- Acme / rivisto / modello / risorsa / revisione / revisione.php
- acme_reviewed_block_reviews
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 ();
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>
.
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.