제품보기 확장 / AddtoCart 클래스 (PHP 및 PHTM)
문제
제품 페이지에서 제품 수량을 사전 설정해야합니다.
nb1 : 내 제품은 Formula_Price-active라는 백엔드에 정의 된 새로운 예 / 아니오 속성을 가지고 있습니다. NB2 : 수식 _PRICE_Active 제품의 경우 제품 URL을 통해 매개 변수를 통과하여 내 제품 페이지를 사전 구성
i는 view.php 클래스를 확장하여 사용자 지정 기능을 추가 / 과부하시킵니다.
<?php
class Mine_Quotemodule_Block_Catalog_Product_View extends Mage_Catalog_Block_Product_View
{
/**
* Get default qty - either as preconfigured, or as 1.
* Also restricts it by minimal qty.
*
* @param null|Mage_Catalog_Model_Product $product
* @return int|float
*/
public function getProductDefaultQty($product = null)
{
if (!$product) {
$product = $this->getProduct();
}
$FPA_att_value = $product->getAttributeText('formula_price_active');
if (isset($FPA_att_value) && (($FPA_att_value == 'yes') || ($FPA_att_value == 'oui')))
{
$params = Mage::app()->getRequest()->getParams();
$urlParams = array();
foreach ($params as $name=>$value)
{
if ($name!="id")
{
$urlParams[$name] = base64_decode($value);
}
}
if (isset($urlParams['Devis_Qty']))
{
$qty = $urlParams['Devis_Qty'];
}
else
{
$qty = $this->getMinimalQty($product);
$config = $product->getPreconfiguredValues();
$configQty = $config->getQty();
if ($configQty > $qty) {
$qty = $configQty;
}
}
}
else
{
$qty = $this->getMinimalQty($product);
Mage::log('Qty'.$qty);
$config = $product->getPreconfiguredValues();
$configQty = $config->getQty();
Mage::log('configQty '.$configQty);
if ($configQty > $qty) {
$qty = $configQty;
}
}
Mage::log('Final Qty'.$qty);
return $qty;
}
public function testProductFP($product = null)
{
if (!$product) {
$product = $this->getProduct();
}
$FPA_att_value = $product->getAttributeText('formula_price_active');
if (isset($FPA_att_value) && (($FPA_att_value == 'yes') || ($FPA_att_value == 'oui')))
{
$params = Mage::app()->getRequest()->getParams();
$urlParams = array();
foreach ($params as $name=>$value)
{
if ($name!="id")
{
$urlParams[$name] = base64_decode($value);
}
}
if (isset($urlParams['Devis_Qty']))
{
$result = true;
}
else
{
$result = false;
}
}
else
{
$result = false;
}
return $result;
}
...
.
및 view.phtml 사용자 정의 재료를 추가하려면 (하지만 이론적으로 현재 문제와 아무 관련이 없습니다) :
…
<div class="extra-info">
<?php echo $this->getReviewsSummaryHtml($_product, 'default', false)?>
<!-- Modifs Perso -->
<!--<?php echo $this->getChildHtml('product_type_availability'); ?>-->
<?php echo $this->getDimHtml() ?>
<!-- ******************** -->
</div>
…
.
이것은 잘 작동하는 것처럼 보입니다. - 케이스 1 : 수식 _PRICE_Active가 아니오로 설정되거나 YES로 설정되어 있지만 필요한 매개 변수가 없으면 기본 GetDefaultQuantity 메소드가 사용됩니다. - 가방 2 : 수식 _PRICE_Active가 YES로 설정되고 매개 변수가 괜찮을 때 원하는 QTY를 설정합니다.
i는 Case 2에서 수량 입력을 비활성화하기 위해 사용자 정의 Addtocart.phtml을 추가했습니다.
그러나 layout.xml에 그것을 추가 할 때 문제가 나타납니다.
케이스 2가 작동하지만 경우에는 1이면 수량이 0으로 설정됩니다.
이상한 것은 무엇입니까? 에 정의 된 수량 레이아웃이 변경됩니다.
여기 내 layout.xml
<?xml version="1.0"?>
<layout version="0.1.0">
<default>
<reference name="content">
</reference>
<reference name="head">
<action method="addItem"><type>skin_css</type><name>css/quote_form.css</name></action>
</reference>
</default>
<routeurfrontend_index_index>
<reference name="content">
<block type="quotemodule/quoteformblock" name="quoteform_quoteformblock"
template="quotemodule/quoteform.phtml" />
</reference>
</routeurfrontend_index_index>
<catalog_product_view>
<reference name="product.info">
<action method="setTemplate">
<template>quotemodule/catalog/product/view.phtml</template>
</action>
</reference>
<reference name="product.info.addtocart">
<action method="setTemplate">
<template>quotemodule/catalog/product/view/addtocart.phtml</template>
</action>
</reference>
</catalog_product_view>
</layout>
.
도움말 qu,
해결책
그것은 어리석은 실수였습니다 ... 죄송합니다 ...
i 기반이 잘못된 템플리트 (rwd / default 대신 기본 / 기본값 대신 기본 / 기본값)에있는 내 addtocart.phtml.getProductDefaultQty가 null을 반환하면 기본값 / 기본값은 1 씩 수량 값을 1로 대체하지 않지만 rwd / default는 다음을 수행합니다.
기본 / 기본 addtocart.phtml
<input type="text" name="qty" id="qty" maxlength="12" value="<?php echo $this->getProductDefaultQty() * 1 ?>" title="<?php echo $this->__('Qty') ?>" class="input-text qty" />
.
rwd / default addtocart.phtml
<input type="text" pattern="\d*" name="qty" id="qty" maxlength="12" value="<?php echo max($this->getProductDefaultQty() * 1, 1) ?>" title="<?php echo $this->__('Qty') ?>" class="input-text qty" />
.