2009-10-06 3 views
6

고객을위한 Magento 상점을 구축 중이며 드롭 다운 목록의 기능을하는 모든 제품에 속성을 추가하고 싶습니다. '제조업체'속성과 동일합니다.Magento : 제품의 드롭 다운 속성 값을 미리 채우는 방법

그러나 속성 값 목록을 수동으로 입력하는 대신 값을 외부 사이트에서 채우고 싶습니다. 따라서 새 제품을 만들거나 기존 제품을 편집 할 때마다 드롭 다운에 원격 사이트에서 검색된 값의 최신 목록이 채워집니다. 목록을 속성 생성 중에 한 번만 가져 오지 말고 제품을 만들거나 편집 할 때마다 가져와야합니다.

예를 들어, 원격 사이트에서 컬을 통해 모든 제조업체 목록을 얻을 수 있다고 가정합니다. 이 목록의 이름은 때때로 수정되거나 추가되지만 ID는 동일하게 유지되므로 뒤에서 사용해야합니다. 제조업체의 드롭 다운 값을 어떻게 미리 채우겠습니까?

기본 맞춤 확장 프로그램을 만드는 방법을 알고 있지만 adminhtml 백엔드를 확장하는 것이 새로운 기능입니다.

도움을 주시면 감사하겠습니다.

+0

대답을 수락합니까? – ColinM

+0

@ 콜린 남 끝난. :) –

답변

10

Magento 제품 속성은 매우 융통성이 있지만 제품마다 동적 인 가치가 있다는 것은 제품별로 하나의 속성이 필요하다는 것을 의미합니다.별로 의미가 없으므로 이러한 속성 값이 제품 내에서 공통점을 공유한다고 가정합니다. 당신은 제한된 수의 속성 (또는 하나?)을 갖게 될 것입니다. 이러한 각 속성에 대해 사전에 속성 및 백엔드 모델을 작성한 다음 cron 작업 또는 이벤트를 사용하여 API의 속성 값 옵션을 갱신하고 데이터베이스 또는 일부 다른 메소드에서 로컬로 캐시하십시오.

$installer->addAttribute('catalog_product', 'my_attr_code', array(
    'label' => 'Attribute Name', 
    'required' => false, 
    'input' => 'select', 
    'source' => 'namespace/source', 
    'default' => 'none', 
    'position' => 1, 
    'sort_order' => 3, 
)); 

을 또는 eav_attribute 테이블에 대한 자신의 SQL 삽입 문을 롤 :이 같은 모듈 설치에 속성을 추가 할 수 있습니다. 새 속성을 백엔드에 설정된 속성에 지정하여 제품에서 사용할 수 있도록하십시오.그런 다음 방법 Mage_Eav_Model_Entity_Attribute_Source_Table (당신이 당신의 속성 값에 대한 선택 입력을 원하는 가정) 확장 및 최소 구현 My_Namespace_Model_Source에서 모델을 만들 :

getAllOptions() 
getOptionText($value) 

을 그래서이 로컬 캐시 된 동적 옵션에서 끌어 것이며, 대부분 새 속성은 Magento에서와 같이 작동합니다. 이러한 방법은 한 페이지로드에서 여러 번 공격 될 수 있으므로 지능형 캐싱을 사용해야합니다. 제품 생성 또는 편집 페이지가 표시되기 바로 전에 관찰 된 이벤트가있을 수 있습니다. 그렇지 않으면 클래스 또는 컨트롤러를 무시하거나 Magento cron 작업을 사용하십시오.

편집 : 기존 Magento 속성 모델을 사용하고 기존 API를 통해 옵션 값을 만들 수도 있지만 동기화를 수행하거나 다른 이유로 인해 추가 메타 데이터가 필요할 수 있다고 가정합니다. 커스텀 백엔드 모델.

4

좋은 대답은 아니지만 여기서는 먼저 속성을 추가 한 다음 리버스 엔지니어링하여 속성이 어떻게 채워지는지 확인합니다.

그런 다음 관리자의 제품 표시 페이지에서, 나는 그 속성에 컬을 사용하여 값을로드하려면 productController의 편집 및 새로운 조치를 오버라이드 (override) 할

(당신은 eav_attribute 테이블에 속성의 ID를 조회 할 수 있습니다)

그러면 이것을 사용자 정의 확장으로 패키지화 할 수 있으므로 코어 코드를 직접 편집하지 않아도됩니다. 행운을 빕니다!

4

Magento Event Dispatcher를 찾아야합니다.

기본적으로 제품 업데이트, 주문 제출, 무언가 삭제 등의 이벤트가 발생할 때마다 메시지가 시스템을 통해 전송됩니다. 이러한 메시지를 포착 한 다음 사용자가 작성한 메소드를 트리거 할 수 있습니다. 원하는 것을 얻으려면 제품을 만들고 업데이트 할 때 트리거되는 이벤트를 잡아서 맞춤 모듈 중 하나에서 메소드를 실행해야합니다. 이 메서드는 원격 사이트에서 값을 가져 와서 제품을 업데이트합니다.

http://blog.baobaz.com/en/tag/magento-events

당신은 마 젠토 이벤트가 해당 모듈의 코드를보고 트리거되는 것을 확인할 수 있습니다

빠른 Google 검색 후, 나는 다음과 같은 기사를 발견했다.

관련 문제