Pregunta

He pasado los últimos días tratando de averiguar cómo pasar las variables de mi controlador a mi modelo.Estoy tratando de construir un filtro de productos muy simple que toma algunas entradas de forma y construye una colección de productos en función de ellos.Tengo el formulario construido y estoy usando AJAX:

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

Publicar en mi controlador:

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

Entonces necesito las dos variables allí para estar disponibles en mi modelo:

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

He intentado el método Mage::register('gate-location', $gate_location);, pero no puedo acceder a ellos en la clase modelo desde alguna razón.

¿Fue útil?

Solución 3

Después de una larga semana de sacar mi cabello, llegué a darme cuenta de que la mejor manera de pasar información de un controlador a un modelo no.Gracias a Ben @ SONASSI por responder a una pregunta no relacionada que me hizo darme cuenta de que puedo usar

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

para obtener la variable de publicación dentro de la acción del modelo para acceder a lo que necesitaba.

Otros consejos

¿Entonces, básicamente quieres pasar una variable de una clase a otra?

Si eso es lo que quiere lograr, ¿por qué no pasarlos como parámetros de método?getItemsCollection es IIRC no definido en ninguna clase de padres, por lo que es libre de cambiar su firma:

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

Si desea evitarlo por cualquier motivo, aún puede modificar la colección después:

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

Si va al modelo

Custom_GateSelector_Model_Products en este indexAction(), entonces obtendría esos parámetros en el modelo.

Entonces, llame a continuación las funciones en getItemscollection

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

Según el sistema MAGENTO, no puede obtener el controlador actual no puede llegar a otra página

Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top