Passare la variabile dal controller al modello
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.
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