참조 된 상거래 제품의 그리드 만들기
Commerce 1.x와 함께 Drupal 7을 사용하고 있으며 Commerce Product 엔터티에 대한 참조 필드가있는 콘텐츠 유형을 만들었습니다.
그리고 이제 참조 된 제품의 그리드를 렌더링하고 싶습니다. 즉, 노드 페이지의 각 제품에 대한 전용 카트 추가 양식입니다.
적어도 지금까지는 불가능한 일처럼 보입니다. 보기, 사용자 지정 양식 템플릿 변수 등으로 시도했지만 항상 다음과 같은 오류가 발생합니다.
알림 : 정의되지 않은 인덱스 : form_process_radios () 함수의 #options (행 3188
매개 변수는 form_process_radios () 함수에서 Countable을 구현하는 배열 또는 객체 여야합니다 (rivi 3188
어쨌든 여러 제품에 대한 옵션 (기본 형식)이있는 라디오 요소를 항상 기대합니다. 그러나 그것은 내가 원하는 것이 아니며 숨겨진 요소로 설정하려고했습니다. 나는 또한 양식을 볼 수 있지만 오류를 제거하고 이것을 "책별"로 만들고 싶습니다.
<?php
function mymodule_preprocess_entity(&$variables) { $variables['add_to_cart_form'] = '';
if ($variables['elements']['#entity_type'] == 'commerce_product'){ $item = $variables['elements']['#entity']; if (empty($item->product_id)) {
return;
}
$form_id = commerce_cart_add_to_cart_form_id([$item->product_id]);
$line_item = commerce_product_line_item_new($item, 1, 0, [], 'custom_owner');
$line_item->commerce_product = $item->product_id;
$line_item->data['context']['product_ids'] = array($item->product_id);
$line_item->data['context']['show_single_product_attributes'] = 1; $product_form = drupal_get_form($form_id, $line_item);
// Trying to change from radio element to hidden
$product_form['product_id']['#type'] = 'hidden'; unset($product_form['product_id']['#theme_wrappers']);
unset($product_form['product_id']['#process']); $form_markup = drupal_render($formp); $variables['add_to_cart_form'] = array('#markup' => $form_markup);
}
}?>
답변
이것은 사용자 정의 코드없이 일반 뷰만 가능합니다. 트릭은 노드 유형이 무엇이든 콘텐츠를 기반으로 View를 만들고 노드에서 제품 참조 필드에서 참조하는 제품으로의 관계를 설정하는 것입니다. 보기에 제품 필드를 사용할 수있게되면 Commerce 1.x는보기에 드롭 할 수있는 변형 별 장바구니에 추가 양식 필드를 제공합니다.
이 작업을 수행하는 샘플보기를 만들어 내 제품 디스플레이 노드 유형의 노드 페이지에있는 블록에 배치했습니다. 컨텍스트 필터를 사용하여 URL에서 노드 ID를 확인하고 위에서 설명한 관계를 통해 제품에 조인 한 다음 그리드에 제품 제목, 가격 및 장바구니에 추가 양식을 표시합니다.
제품 장바구니에 추가 양식을 통해 추가 된 개별 항목은 노드의 컨텍스트를 유지하지 않습니다. 그래서 "제품 3"이 내 장바구니에 링크로 렌더링되지만 2와 1은 그렇지 않습니다. 그것은 것입니다 그 형태가이 시점에서 적절한 상황을 확인하기 위해 사용자 지정 코드를 가지고 있지만, 그것은 또 다른 질문입니다.
시각적 학습자 인 경우이 작업을 수행하기 위해 구성한보기는 다음과 같습니다.