Domanda

Client vuole mostrare informazioni di parte del prodotto in vista categoria. Ha ottenuto tutte le descrizioni, le immagini e prodotti correlati, ma hanno problemi con recensioni e forma. Chiunque può aiutare me, per favore?

Codice:

In app / design / frontend / catalogo / prodotto / list.phtml

<?php echo $this->getChildHtml('review_form')->setProduct($product)->toHtml(); ?>

In local.xml fatta stesse modifiche come ProxiBlue detto di fare in catalog.xml:

<catalog_category_default>
    <reference name="content">
        <reference name="product_list">
            <block type="review/form" name="product.review.form" as="review_form">
                <block type="page/html_wrapper" name="product.review.form.fields.before" as="form_fields_before" translate="label">
                    <label>Review Form Fields Before</label>
                    <action method="setMayBeInvisible"><value>1</value></action>
                    <action method="setElementClass"><value>rewards</value></action>
                </block>
            </block>
        </reference>
    </reference>
</catalog_category_default>

Quindi, dopo aver fatto questo cambia ho ottenuto l'errore in frontend:

Fatal error: Call to a member function setProduct() on a non-object.

Poi ho aperto app / code / Mage / Review / blocchi / form.php e curato getAction () funzione come questa:

public function getAction()
{
    $productId = $this->getProduct()->getId();
    return Mage::getUrl('review/product/post', array('id' => $productId));
}

Dopo che vedo il testo per il primo prodotto a pagina 'Scrivi la tua opinione' e questo è tutto, altri prodotti non viene caricato, ma nessun errore apparsi in console o frontend. Credo, devo fare smth più nel file di form.php.

Inoltre ho bisogno di ottenere non solo forma, ma anche recensioni.

Grazie per qualsiasi aiuto.

È stato utile?

Soluzione

Il sotto dovrebbe ottenere sulla strada giusta. (Ampliato per spiegare più in dettaglio, come per i commenti)

Il comportamento di default per le recensioni è quello di fare un post modulo sul controller recensione. Questo post modulo ottiene il prodotto ID per il prodotto che deve essere rivisto.

è possibile vedere questa variabile recuperato nel codice di blocco Mage_Review_Block_Form::getAction() - $productId = Mage::app()->getRequest()->getParam('id', false);

Questo viene poi utilizzato per ottenere i dati di prodotto (per il nome), e per costruire la revisione modulo posta URL.

Dal momento che si desidera visualizzare il modulo nella pagina di categoria (per prodotto), non si può fare questo, e hanno bisogno di un altro modo per impostare il prodotto corretto (id). Questo è facile, da solo di passaggio nei dati di prodotto, per il prodotto corrente, tramite il .phtml utilizzando una riga come questa:

<?php echo $this->getChild('review_form')->setProduct($_product)->toHtml(); ?>

E 'meglio passare solo l'intero oggetto del prodotto, dal momento che è possibile utilizzare uno qualsiasi dei dati di prodotto nel blocco di revisione.

Per far funzionare il tutto, è necessario creare un nuovo blocco che si estende il nucleo di classe revisione blocco Mage_Review_Block_Form (non riscrivere, basta estendere), e regolare la funzionalità di tirare il prodotto id dall'oggetto prodotto passato.

si desidera estendere le funzioni che ottengono il productId di utilizzare il dato productid (vedi più avanti in phtml) Ciò è necessario per consentire a ciascun modulo da distacco per ogni prodotto, il resto saranno tutti postale per un prodotto.

come esempio gli sguardi metodo Mage_Review_Block_Form::getAction() come questo:

public function getAction()
    {
        $productId = Mage::app()->getRequest()->getParam('id', false);
        return Mage::getUrl('review/product/post', array('id' => $productId));
    }

e si avrà bisogno di cambiare la situazione per tirare il productId da $this->getProduct()->getId(); (di nuovo, vedi più avanti in rettifica phtml come impostato)

Dopodiché è necessario regolare i layout per includere il modulo di revisione. quindi in catalog.xml è necessario per ottenere il layout modulo recensione in catalog_category di layout

È necessario impostare il blocco al vostro nuovo blocco, e non la revisione del blocco centrale, permettendo così al .phtml di chiamare i tuoi metodi, che cambiano il comportamento per ottenere i dati di prodotto dal luogo diverso.

mettere questo blocco xml:

<block type="YOUR_MODULE_NAMESPACE/YOUR_BLOCK" name="product.review.form" as="review_form">
 <block type="page/html_wrapper" name="product.review.form.fields.before" as="form_fields_before" translate="label">
                            <label>Review Form Fields Before</label>
                            <action method="setMayBeInvisible"><value>1</value></action>
                            <action method="setElementClass"><value>rewards</value></action>
                        </block>
                    </block>

nell'area di layout <catalog_category_default translate="label">, contenuta all'interno <block type="catalog/product_list" name="product_list" template="catalog/product/list.phtml"> (potrebbe anche essere necessario per collocarlo nell'area di layout categoria di ancoraggio)

Questa quindi imposta la forma opinione a essere un blocco del bambino del catalogo / Product_List

Ora, per rendere più visualizzare, è necessario modificare il file list.phtml (... / template / catalogo / prodotto / list.phtml) per includere il modulo di revisione e poi passarlo il prodotto corrente

Questo viene fatto semplicemente utilizzando

<?php echo $this->getChild('review_form')->setProduct($_product)->toHtml(); ?>

Per completezza, la sezione completa di layout xml:

<catalog_category_default translate="label">
        <label>Catalog Category (Non-Anchor)</label>
        <reference name="left">
            <block type="catalog/navigation" name="catalog.leftnav" after="currency" template="catalog/navigation/left.phtml"/>
        </reference>
        <reference name="content">
            <block type="catalog/category_view" name="category.products" template="catalog/category/view.phtml">
                <block type="catalog/product_list" name="product_list" template="catalog/product/list.phtml">
                    <block type="catalog/product_list_toolbar" name="product_list_toolbar" template="catalog/product/list/toolbar.phtml">
                        <block type="page/html_pager" name="product_list_toolbar_pager"/>
                        <!-- The following code shows how to set your own pager increments -->
                        <!--
                            <action method="setDefaultListPerPage"><limit>4</limit></action>
                            <action method="setDefaultGridPerPage"><limit>9</limit></action>
                            <action method="addPagerLimit"><mode>list</mode><limit>2</limit></action>
                            <action method="addPagerLimit"><mode>list</mode><limit>4</limit></action>
                            <action method="addPagerLimit"><mode>list</mode><limit>6</limit></action>
                            <action method="addPagerLimit"><mode>list</mode><limit>8</limit></action>
                            <action method="addPagerLimit" translate="label"><mode>list</mode><limit>all</limit><label>All</label></action>
                        -->
                    </block>
                    <action method="addColumnCountLayoutDepend"><layout>empty</layout><count>6</count></action>
                    <action method="addColumnCountLayoutDepend"><layout>one_column</layout><count>5</count></action>
                    <action method="addColumnCountLayoutDepend"><layout>two_columns_left</layout><count>4</count></action>
                    <action method="addColumnCountLayoutDepend"><layout>two_columns_right</layout><count>4</count></action>
                    <action method="addColumnCountLayoutDepend"><layout>three_columns</layout><count>3</count></action>
                    <action method="setToolbarBlockName"><name>product_list_toolbar</name></action>
                    <block type="YOUR_MODULE_NAMESPACE/YOUR_BLOCK" name="product.review.form" as="review_form">
                        <block type="page/html_wrapper" name="product.review.form.fields.before" as="form_fields_before" translate="label">
                            <label>Review Form Fields Before</label>
                            <action method="setMayBeInvisible"><value>1</value></action>
                            <action method="setElementClass"><value>rewards</value></action>
                        </block>
                    </block>
                </block>
            </block>
        </reference>
    </catalog_category_default>

quanto sopra in azione, brutto, come il design non consente una forma, ma sono sicuro che i tuoi di volontà;)

screen-grab-of-questo-in-azione

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