Pergunta

Eu passei os últimos dias tentando descobrir como passar variáveis de meu controlador para o meu modelo.Eu estou tentando construir um simples filtro de produto que leva a alguma forma de entradas e cria uma coleção de produtos com base neles.Eu tenho o formulário construído e estou usando AJAX:

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

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

Então eu preciso de duas variáveis não estar disponíveis no meu 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;
  }
} 

Eu tentei o Mage::register('gate-location', $gate_location); o método, mas eu não posso acessá-los no Modelo de classe a partir de algum motivo.

Foi útil?

Solução 3

Então, depois de uma longa semana de puxar o meu cabelo, eu vim a perceber que a melhor forma de passar as informações de um controlador para um modelo é não.Graças a Ben @ Sonassi para responder a uma questão não relacionados, o que me fez perceber que eu posso usar

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

para obter o post variável dentro do modelo de acção para acessar o que eu precisava.

Outras dicas

Então, basicamente você quer para passar uma variável de uma classe para outra?

Se é isso que você quer alcançar, por que não passá-los como parâmetros de método? getItemsCollection rodar em qualquer classe pai, assim você está livre para alterar sua assinatura:

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

Se você quiser evitar que, por qualquer motivo, você ainda pode modificar a coleção mais tarde:

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

Se você vai a modelo

Custom_GateSelector_Model_Products neste indexAction() em seguida, ele iria obter os parâmetros do modelo.

Assim,chamar funções abaixo em getItemsCollection

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

Conforme magento sistema ,você não pode obter o controlador da corrente não pode ficar para outra página

Licenciado em: CC-BY-SA com atribuição
Não afiliado a magento.stackexchange
scroll top