Frage

Ich habe die letzten Tage damit verbracht, herauszufinden, wie Variablen von meinem Controller an mein Modell übergeben werden.Ich versuche, einen sehr einfachen Produktfilter zu erstellen, der einige Formulareingaben aufnimmt und darauf basierend eine Produktsammlung erstellt.Ich habe das Formular erstellt und verwende AJAX:

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

an meinen Controller posten:

    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');
    }
}

Dann brauche ich die beiden dortigen Variablen, um in meinem Modell verfügbar zu sein:

    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;
  }
} 

Ich habe das ausprobiert Mage::register('gate-location', $gate_location); methode, aber ich kann aus irgendeinem Grund in der Modellklasse nicht darauf zugreifen.

War es hilfreich?

Lösung 3

Nach einer langen Woche, in der ich mir die Haare auszog, wurde mir klar, dass der beste Weg, Informationen von einem Controller an ein Modell weiterzugeben, dies nicht ist.Vielen Dank an Ben @ Sonassi für die Beantwortung einer nicht verwandten Frage, die mir klar gemacht hat, dass ich sie verwenden kann

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

um die Post-Variable in die Aktion des Modells aufzunehmen, um auf das zuzugreifen, was ich brauchte.

Andere Tipps

Sie möchten also grundsätzlich eine Variable von einer Klasse an eine andere übergeben?

Wenn Sie das erreichen möchten, warum übergeben Sie sie nicht als Methodenparameter? getItemsCollection ist iirc in keiner übergeordneten Klasse definiert – Sie können also die Signatur ändern:

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

Wenn Sie dies aus irgendeinem Grund vermeiden möchten, können Sie die Sammlung anschließend noch ändern:

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

Wenn du willst das Modell

Custom_GateSelector_Model_Products auf diesem indexAction() dann würde es diese Parameter auf dem Modell bekommen.

Rufen Sie also die folgenden Funktionen für getItemsCollection auf

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

Gemäß dem Magento-System können Sie den aktuellen Controller nicht abrufen und nicht auf eine andere Seite gelangen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top