Domanda

A corto di creare il mio widget o classe di blocco a farlo, c'è un modo per visualizzare il nome di un prodotto, SKU, prezzi, o altre proprietà in una pagina di blocco statico o CMS?

Se non c'è un modo per farlo fuori dalla scatola, c'è un modo ben salvo per raggiungere questo obiettivo?

Cioè, mi piacerebbe essere in grado di fare qualcosa di simile in un blocco o una pagina

{{block type="some/block" sku="PRODUCT_SKU" variable_to_display="name"}}

e hanno il nome del prodotto appare nella statica blocco / pagina.

Questo esistono nel nucleo di Magento? Da qualche parte nella comunità?

È stato utile?

Soluzione

io non sono pienamente a conoscenza di un nucleo i mezzi per andare su questo (non ho guardato), ma quanto segue non è particolarmente difficile da attuare.

Solo pochi giorni fa, abbiamo bisogno l'uscita da un helper -. Ripassato in un altro aiutante, reso tramite un blocco CMS

Questo non richiederà i file phtml essere creati solo per il gusto di una singola funzione -. E permetterà un uso abbastanza flessibile dei metodi helper o model da eseguire

Mentre probabilmente non la soluzione core pulita che si desidera, l'uscita dovrebbe essere quello che cercate.

Chiamata di metodi di supporto

Non v'è alcuna tolleranza di errore in questo (cioè il controllo di un metodo / classe esiste ancora, ecc.); ma se si ha realmente bisogno, si potrebbe modificarlo per esempio.

Quello che volevo era andare a prendere il valore di ritorno di un aiutante che ha ottenuto il prezzo minimo di un prodotto fascio; quindi spingere che uscita attraverso l'helper valuta per formattare in modo appropriato.

{{block type="sonassi.core/helper" helper="sonassi.core/catalog" function="getMinMaxPrice" arg1="5" arg2="" arg3="min" callback_helper="core" callback_function="currency" callback_arg1="function_response" callback_arg2="true" callback_arg3="false"}

Che è stato reso utilizzando la seguente classe.

<?php
/*
* @category    Module
* @package     Sonassi_Core
* @copyright   Copyright (c) 2012 Sonassi
*/
class Sonassi_Core_Block_Helper extends Mage_Core_Block_Abstract
{
  protected function _toHtml()
  {
    try {
      $args = $this->getData();
      $_helper = Mage::helper($args['helper']);
      $html = false;
      $argStr = implode("###", array_keys($args));
      if (preg_match_all('/arg[0-9]+/', $argStr, $matches)) {
        $data = array_intersect_key($args,array_flip($matches[0]));
        array_walk($data, array(Mage::helper('sonassi.core'),'stringToBoolean'));
        $html = call_user_func_array(array($_helper, $args['function']), $data);
      }
      if (isset($args['callback_helper'])) {
        $_callbackHelper = Mage::helper($args['callback_helper']);
        if (preg_match_all('/callback\_arg[0-9]+/', $argStr, $matches)) {
          $data = array_intersect_key($args,array_flip($matches[0]));
          $testCase = array_flip($data);
          if (isset($testCase['function_response'])) {
            $position = $testCase['function_response'];
            $data[$position] = $html;
          }
          array_walk($data, array(Mage::helper('sonassi.core'),'stringToBoolean'));
          $html = call_user_func_array(array($_callbackHelper, $args['callback_function']), $data);
        }
      }
      return $html;
    } catch(Exception $e) {}
    return;
  }
}

Chiamata di metodi Girl

Quindi, modificando il codice di cui sopra sempre così un po ' (ho spogliato il callback aiutante solo per ridurre la quantità di codice) .

Si potrebbe eseguire,

{{block type="sonassi.core/model" model="catalog/product" load_attribute="sku" load_value="product-sku" function="getName"}}

Con la classe seguente supporto,

<?php
/*
* @category    Module
* @package     Sonassi_Core
* @copyright   Copyright (c) 2012 Sonassi
*/
class Sonassi_Core_Block_Model extends Mage_Core_Block_Abstract
{
  protected function _toHtml()
  {
    try {
      $args = $this->getData();
      $_model = Mage::getModel($args['model'])
      if (isset($args['load_id']))
        $_model->load($args['load_id']);
      elseif (isset($args['load_attribute']) && isset($args['load_value']))
        $_model->loadByAttribute($args['load_attribute'], $args['load_value']);
      $html = false;
      $argStr = implode("###", array_keys($args));
      if (preg_match_all('/arg[0-9]+/', $argStr, $matches)) {
        $data = array_intersect_key($args,array_flip($matches[0]));
        array_walk($data, array(Mage::getModel('sonassi.core'),'stringToBoolean'));
        $html = call_user_func_array(array($_model, $args['function']), $data);
      }
      return $html;
    } catch(Exception $e) {}
    return;
  }
}

Questa classe è stata mantenuta abbastanza generica e caricando un metodo tutto per un metodo sarebbe pesante - ma si può solo adattarlo alle proprie esigenze.

Ovviamente qualcosa come questo sarebbe più leggero, ma è possibile modificare i vostri metodi in base alle proprie esigenze.

Mage::getResourceModel('catalog/product')->getAttributeRawValue($productId, 'attribute_code', $storeId);

Comune Metodo

Il metodo di supporto di cui sopra, stringToBoolean, era solo la seguente:

public function stringToBoolean(&$value, $key)
{
  if ($value == "true")
    $value = true;
  elseif ($value == "false")
    $value = false;
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top