Domanda

Ho trascorso gli ultimi due giorni a cercare di capire come passare le variabili dal mio controller al mio modello.Sto cercando di costruire un filtro prodotto molto semplice che prende alcuni ingressi moduli e crea una raccolta di prodotti in base a loro.Ho la forma costruita e sto usando Ajax:

jQuery.ajax(
    {
        url: formURL,
        type: "POST",
        data: {
            location : location,
            width : width
        },
        success: function() {
            alert('form good');
        },
        error: function() {
            alert('form issue');
        } 
    });
.

Per pubblicare il mio controller:

    class Custom_GateSelector_IndexController extends Mage_Core_Controller_Front_Action
{
    public function indexAction() 
    {
        $gate_location = $this->getRequest()->getPost('location');
        $gate_width    = $this->getRequest()->getPost('width');
    }
}
.

Allora ho bisogno delle due variabili lì per essere disponibile nel mio modello:

    class Custom_GateSelector_Model_Products extends Mage_Catalog_Model_Product
{
  public function getItemsCollection()
  {
      $topStairs = 'yes';
      $gateWidth = 29.00;
      $rootcatID = Mage::app()->getStore()->getRootCategoryId();

      $collection = $this->getCollection()
          ->addAttributeToSelect('*')
          ->addAttributeToFilter('gate_max_width', array('gt' => $gateWidth))
          ->addAttributeToFilter('category_id', array('in' => $rootcatID))
          ->addAttributeToFilter('type_id', array('eq' => 'simple'))                                         
          ->addAttributeToSort('price', 'DESC')                                                               
          ->addAttributeToFilter('status', array('eq' => Mage_Catalog_Model_Product_Status::STATUS_ENABLED)); 

      return $collection;
  }
} 
.

Ho provato il metodo Mage::register('gate-location', $gate_location);, ma non riesco ad accedervi nella classe del modello da qualche motivo.

È stato utile?

Soluzione 3

Quindi dopo una lunga settimana di tirando fuori i miei capelli, sono venuto a capire che il modo migliore per passare informazioni da un controller a un modello non è.Grazie a Ben @ Sonassi per aver risposto a una domanda non correlata che mi ha fatto capire che posso usare

Mage::app()->getRequest()->getParam('location');
.

Per ottenere la variabile post all'interno dell'azione del modello per accedere a ciò di cui avevo bisogno.

Altri suggerimenti

Così si vuole praticamente passare una variabile da una classe all'altra?

Se questo è ciò che vuoi raggiungere, perché non passarli come parametri del metodo?getItemsCollection è IIRC non definito in nessuna classe genitore - quindi sei libero di cambiarne la firma:

public function getItemsCollection($gateLocation, $gateWidth)
{
    // …
}
.

Se vuoi evitarlo per qualsiasi motivo, è comunque possibile modificare la raccolta in seguito:

$collection = $gsProduct->getItemsCollection();
$collection->addAttributeToFilter('gate_max_width', array('gt' => $gateWidth))
.

Se vuoi il modello

Custom_GateSelector_Model_Products su questo indexAction() Quindi otterrebbe questi parametri sul modello.

Quindi, chiama sotto le funzioni su GetItemScollection

$gate_location = Mage::app()->getRequest()->getPost('location');
$gate_width    = Mage::app()->getRequest()->getPost('width');
.

Secondo il sistema Magento, non è possibile ottenere il controllore corrente non può arrivare a un'altra pagina

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