prestashop에서 Product 클래스의 재정의를 만들어야합니다. 이렇게하려면 Product.php라는 재정/클래스에 새로운 파일을 생성하고이 코드를 넣어 :
<?php
class Product extends ProductCore
{
// Here we will put every method or property override
}
를이 클래스, 당신은 복사/priceCalculation
(이것은 원래의 라인 2567에서의 정적 메소드를 붙여 넣에서 나를위한 Product.php 파일).
if ($id_product == 44 && Context::getContext()->customer->isLogged()) {
$customer = Context::getContext()->customer;
$nbTimesBoughtThisProduct = (int) Db::getInstance()->getValue('
SELECT COUNT(*)
FROM `' . _DB_PREFIX_ . 'product` p
JOIN `' . _DB_PREFIX_ . 'order_detail` od
ON p.`id_product` = od.`product_id`
JOIN `' . _DB_PREFIX_ . 'orders` o
ON od.`id_order` = o.`id_order`
WHERE o.`id_customer` = ' . $customer->id . '
AND p.`id_product` = ' . $id_product . '
');
$price += $nbTimesBoughtThisProduct * 10;
}
내가 이것들을 테스트 할 시간이 없었다,하지만 난 그게 당신이 원하는 일을 할 수있는 방법이라고 생각 : 완료되면 바로 바로 self::$_prices[$cache_id] = $price;
전에, 방법의 끝에 다음 줄을 추가합니다.
priceCalculation
Prestashop이 제품 가격을 요구할 때마다 호출되는 방법입니다. 이 코드를이 메소드 끝에 넣으면 반환 된 가격이 수정됩니다.
코드는 고객이 로그인했는지 여부를 먼저 확인합니다 (고객이 아닌 경우 고객으로부터 주문을받을 수 없음). 그렇다면 쿼리는이 고객이 과거에이 제품을 구입 한 횟수를 검색합니다. 이 숫자에 10을 곱한 값이 가격에 추가됩니다.
편집 : 시릴 관광 말했듯이, 당신은 또한 현재 카트를 계산하려면 경우,이 새로운 코드를 얻을 수 (아직 테스트하지,하지만 작동합니다) :
if ($id_product == 44 && Context::getContext()->customer->isLogged()) {
$customer = Context::getContext()->customer;
$nbTimesBoughtThisProduct = (int) Db::getInstance()->getValue('
SELECT COUNT(*)
FROM `' . _DB_PREFIX_ . 'product` p
JOIN `' . _DB_PREFIX_ . 'order_detail` od
ON p.`id_product` = od.`product_id`
JOIN `' . _DB_PREFIX_ . 'orders` o
ON od.`id_order` = o.`id_order`
WHERE o.`id_customer` = ' . $customer->id . '
AND p.`id_product` = ' . $id_product . '
');
$productsInCart = Context::getContext()->cart->getProducts();
foreach ($productsInCart as $productInCart) {
if ($productInCart['id_product'] == 44) {
$nbTimesBoughtThisProduct++;
}
}
$price += $nbTimesBoughtThisProduct * 10;
}
을 또한, 나는 당신을 조언 "44"제품 ID를 상수, 구성 변수 또는 기타 항목에 저장하지만 그 코드에는 그대로 두지 마십시오. 나는 단지 예를 들어 그렇게했습니다.
저는 실제로 이와 같은 문제를 해결하려고합니다. atm에서 배운 점은 product.php 클래스의 일부 가격 함수를 재정의하는 것이 가장 일반적인 방법이지만 재정의 할 함수를 파악하려고합니다. –
@Nolwennig 실제로'else'는 쓸모가 없습니다. – sitilge
@Fabio 우선, (상수가 아닌 경우)'$ product_id'가되어야하고, 두 번째로'$ product_id = 44'는 항상'true'이고'{$ price = $ price + 10; }'는 항상 실행되고, 세 번째로'else' 문은 쓸모가 없다. * 올바른 * 문법은'$ ($ product_id == 44) {$ price + = 10}'와 같은 것입니다. – sitilge