문제

저는 지난 며칠 동안 컨트롤러에서 모델로 변수를 전달하는 방법을 알아내려고 노력했습니다.저는 일부 양식 입력을 받아 이를 기반으로 제품 컬렉션을 구축하는 매우 간단한 제품 필터를 구축하려고 합니다.양식을 작성했으며 AJAX를 사용하고 있습니다.

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

내 컨트롤러에 게시하려면:

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

그런 다음 내 모델에서 사용할 수 있는 두 가지 변수가 필요합니다.

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

나는 Mage::register('gate-location', $gate_location); 메서드를 사용하고 있지만 어떤 이유로 Model 클래스에서 액세스할 수 없습니다.

도움이 되었습니까?

해결책 3

그래서 일주일 동안 머리를 뽑은 후에 컨트롤러에서 모델로 정보를 전달하는 가장 좋은 방법은 그렇지 않다는 것을 깨달았습니다.관련 없는 질문에 답변해 주신 Ben @ Sonassi에게 감사드립니다.

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

필요한 것에 액세스하기 위해 모델의 작업 내에서 post 변수를 가져옵니다.

다른 팁

기본적으로 한 클래스에서 다른 클래스로 변수를 전달하고 싶습니까?

이것이 당신이 원하는 것이라면 메소드 매개변수로 전달하는 것은 어떨까요? getItemsCollection iirc는 상위 클래스에 정의되어 있지 않으므로 서명을 자유롭게 변경할 수 있습니다.

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

어떤 이유로든 이를 방지하려면 나중에 컬렉션을 수정할 수 있습니다.

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

모델이 되신다면

Custom_GateSelector_Model_Products 이에 indexAction() 그런 다음 모델에서 해당 매개변수를 가져옵니다.

따라서 getItemsCollection에서 아래 함수를 호출하세요.

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

마젠토 시스템에 따라 현재 컨트롤러를 얻을 수 없으며 다른 페이지로 이동할 수 없습니다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 magento.stackexchange
scroll top