답변:
나는 두 부분으로 질문에 대답 할 것이다 :
의 목적지는 link.phtml
입니다 $block->getCheckoutUrl()
. 기능을 변경하기 위해 템플릿을 변경 Magento\Checkout\Block\Onepage\Link
하지 말고 대신 블록을 변경하십시오 . 그렇게하려면 리턴 값을 변경 하는 메소드 를 사용하여 플러그인 을 작성하십시오 afterGetCheckoutUrl()
.
현재 젠토 - 2.0 우리는 카트 모델을 사용하므로 Magento_Checkout 및 Magento_Quote의 서비스 계약이 필요한 방법을 제공 아직 없습니다. 플러그인에서 다음과 같이 삽입하십시오.
public function __construct(\Magento\Checkout\Model\Cart $cart)
{
$this->cart = $cart;
}
카트에 액세스 할 수있게되었으므로 몇 가지 방법으로 항목을 검색 할 수 있습니다. 기본적으로 Magento 1과 동일합니다 .
$this->cart->getQuote()->getItemsCollection()
현재 견적과 관련된 모든 항목이 있는 견적 품목 컬렉션을 반환합니다 .
$this->cart->getItems()
위의 방법에 대한 바로 가기이지만 따옴표가 없으면 빈 배열을 반환하므로 컬렉션 인스턴스를 가져올 수 없습니다.
$this->cart->getQuote()->getAllItems()
항목 컬렉션을로드 한 다음 삭제 된 것으로 표시되지 않은 (즉, 현재 요청에서 제거 된) 모든 항목 의 배열 을 반환합니다 .
$this->cart->getQuote()->getAllVisibleItems()
항목 콜렉션을로드 한 다음 삭제 된 것으로 표시되지 않고 상위 항목 이없는 모든 항목 의 배열 을 리턴합니다 (즉, 번들 및 구성 가능한 제품에 대한 항목을 가져 오지만 연관된 하위 항목은 없음). 각 배열 항목은 장바구니 페이지의 표시된 행에 해당합니다.
가장 적합한 것을 선택하십시오. 대부분의 경우 마지막 방법이 필요합니다.
Magento \ Checkout \ Model \ Cart는 더 이상 사용되지 않습니다.
세션을 사용하여 견적 및 장바구니 항목을 가져와야합니다.
use Magento\Checkout\Model\Session;
public function __construct(
...
Session $session
...
) {
...
$this->_session = $session;
...
}
public function yourFunction()
{
$items = $this->_session->getQuote()->getAllVisibleItems();
}
Magento가 곧 세션을 위해 일종의 저장소를 추가 할 것이라고 확신합니다.
내가 알 수있는 한 Magento \ Quote \ Api \ CartRepositoryInterface 또는 Magento \ Quote \ Api \ CartManagementInterface 중 하나를 사용하여 현재 견적을 얻을 수는 없지만 고객 ID가 있으면 두 가지 중 하나를 사용할 수 있습니다 견적을로드하면 (Magento가 원하는 방식으로 상상할 수 있습니다) 거기에서 견적 / 장바구니 항목을 얻습니다.
CartManagementInterface getCartForCustomer($customerId)
CartRepositoryInterface getForCustomer($customerId)
Magento\Checkout\Model\Session::getQuote()
입니다.
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$cart = $objectManager->get('\Magento\Checkout\Model\Cart');
// retrieve quote items collection
$itemsCollection = $cart->getQuote()->getItemsCollection();
// get array of all items what can be display directly
$itemsVisible = $cart->getQuote()->getAllVisibleItems();
// retrieve quote items array
$items = $cart->getQuote()->getAllItems();
foreach($items as $item) {
echo 'ID: '.$item->getProductId().'<br />';
echo 'Name: '.$item->getName().'<br />';
echo 'Sku: '.$item->getSku().'<br />';
echo 'Quantity: '.$item->getQty().'<br />';
echo 'Price: '.$item->getPrice().'<br />';
echo "<br />";
}
AllItems()
오거나getAllVisibleItems()
반환합니까? 아니면 내 장바구니에서 하나만 (체크 아웃 세션 객체를 사용하고 qutoe 객체를 가져 오겠다) 내기? 블록 클래스에서 체크 아웃 세션을 사용하고 싶기 때문에 차이점이 중요하지만 실제로 블록 내부에 들어가면 qutoe가 비어 있습니다.