خطأ فادح في صفحة سلة التسوق وصفحة العرض الفارغة
-
13-12-2019 - |
سؤال
أحتاج إلى حل لهذا: لا يعكس تغيير السعر المنتجات القابلة للتكوين لذلك كما اقترح @ آرجين ميديما,
تتبعت : سعر المنتج القابل للتكوين في Magento يتجاوز سعر المنتج البسيط
1) عندما استخدمت فقط امتداد مركز جيت نسب من قبل @ برونتو=> عملت بشكل جيد في صفحة العرض ، ولكن ليس في صفحة العربة.
2) عندما استخدمت فقط @ آلان الإجابة = > تعمل بشكل جيد في صفحة سلة التسوق، ولكن ليس في صفحة العرض.
من تجاوز السعر.php من ملحق باستخدامAlan الإجابة، مما رأيته في صفحة سلة التسوق الخطأ التالي
Fatal error: Call to a member function getFinalPrice() on a non-object in
app/code/core/Mage/Catalog/Model/Product.php on line 717
هذا هو السطر 717 : return $this->getPriceModel()->getFinalPrice($qty, $this);
و view page is showing blank now.
أنا أستخدم الكود التالي في
السعر.php
app/code/community/OrganicInternet/SimpleConfigurableProducts/Catalog/Model/Product/Type/Configurable/Price.php
<?php
/**
* Magento
*
* NOTICE OF LICENSE
*
* This source file is subject to the Open Software License (OSL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/osl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@magentocommerce.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade Magento to newer
* versions in the future. If you wish to customize Magento for your
* needs please refer to http://www.magentocommerce.com for more information.
*
* @category Mage
* @package Mage_Catalog
* @copyright Copyright (c) 2014 Magento Inc. (http://www.magentocommerce.com)
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
*/
/**
* Product type price model
*
* @category Mage
* @package Mage_Catalog
* @author Magento Core Team <core@magentocommerce.com>
*/
class Mage_Catalog_Model_Product_Type_Configurable_Price extends Mage_Catalog_Model_Product_Type_Price
{
/**
* Get product final price
*
* @param double $qty
* @param Mage_Catalog_Model_Product $product
* @return double
*/
public function getFinalPrice($qty=null, $product)
{
if (is_null($qty) && !is_null($product->getCalculatedFinalPrice())) {
return $product->getCalculatedFinalPrice();
}
$basePrice = $this->getBasePrice($product, $qty);
$finalPrice = $basePrice;
$product->setFinalPrice($finalPrice);
Mage::dispatchEvent('catalog_product_get_final_price', array('product' => $product, 'qty' => $qty));
$finalPrice = $product->getData('final_price');
$finalPrice += $this->getTotalConfigurableItemsPrice($product, $finalPrice);
$finalPrice += $this->_applyOptionsPrice($product, $qty, $basePrice) - $basePrice;
$finalPrice = max(0, $finalPrice);
$product->setFinalPrice($finalPrice);
return $finalPrice;
}
/**
* Get Total price for configurable items
*
* @param Mage_Catalog_Model_Product $product
* @param float $finalPrice
* @return float
*/
public function getTotalConfigurableItemsPrice($product, $finalPrice)
{
$price = 0.0;
$product->getTypeInstance(true)
->setStoreFilter($product->getStore(), $product);
$attributes = $product->getTypeInstance(true)
->getConfigurableAttributes($product);
$selectedAttributes = array();
if ($product->getCustomOption('attributes')) {
$selectedAttributes = unserialize($product->getCustomOption('attributes')->getValue());
}
foreach ($attributes as $attribute) {
$attributeId = $attribute->getProductAttribute()->getId();
$value = $this->_getValueByIndex(
$attribute->getPrices() ? $attribute->getPrices() : array(),
isset($selectedAttributes[$attributeId]) ? $selectedAttributes[$attributeId] : null
);
$product->setParentId(true);
if ($value) {
if ($value['pricing_value'] != 0) {
$product->setConfigurablePrice($this->_calcSelectionPrice($value, $finalPrice));
Mage::dispatchEvent(
'catalog_product_type_configurable_price',
array('product' => $product)
);
$price += $product->getConfigurablePrice();
}
}
}
return $price;
}
/**
* Calculate configurable product selection price
*
* @param array $priceInfo
* @param decimal $productPrice
* @return decimal
*/
protected function _calcSelectionPrice($priceInfo, $productPrice)
{
if($priceInfo['is_percent']) {
$ratio = $priceInfo['pricing_value']/100;
$price = $productPrice * $ratio;
} else {
$price = $priceInfo['pricing_value'];
}
return $price;
}
protected function _getValueByIndex($values, $index) {
foreach ($values as $value) {
if($value['value_index'] == $index) {
return $value;
}
}
return false;
}
}
الرجاء مساعدتي حيث أنا في عداد المفقودين الآن؟
المحلول
<?php
#The methods in there have become a bit convoluted, so it could benefit from a tidy,
#...though the logic is not that simple any more.
class OrganicInternet_SimpleConfigurableProducts_Catalog_Model_Product_Type_Configurable_Price
extends Mage_Catalog_Model_Product_Type_Configurable_Price
{
#We don't want to show a separate 'minimal' price for configurable products.
public function getMinimalPrice($product)
{
return $this->getPrice($product);
}
public function getMaxPossibleFinalPrice($product) {
#Indexer calculates max_price, so if this value's been loaded, use it
$price = $product->getMaxPrice();
if ($price !== null) {
return $price;
}
$childProduct = $this->getChildProductWithHighestPrice($product, "finalPrice");
#If there aren't any salable child products we return the highest price
#of all child products, including any ones not currently salable.
if (!$childProduct) {
$childProduct = $this->getChildProductWithHighestPrice($product, "finalPrice", false);
}
if ($childProduct) {
return $childProduct->getFinalPrice();
}
return false;
}
#If there aren't any salable child products we return the lowest price
#of all child products, including any ones not currently salable.
public function getFinalPrice($qty=null, $product)
{
//Start edit
$selectedAttributes = array();
if ($product->getCustomOption('attributes')) {
$selectedAttributes = unserialize($product->getCustomOption('attributes')->getValue());
}
//End edit
if (sizeof($selectedAttributes)) return $this->getSimpleProductPrice($qty, $product);
if (is_null($qty) && !is_null($product->getCalculatedFinalPrice())) {
return $product->getCalculatedFinalPrice();
}
$basePrice = $this->getBasePrice($product, $qty);
$finalPrice = $basePrice;
$product->setFinalPrice($finalPrice);
Mage::dispatchEvent('catalog_product_get_final_price', array('product' => $product, 'qty' => $qty));
$finalPrice = $product->getData('final_price');
$finalPrice += $this->getTotalConfigurableItemsPrice($product, $finalPrice);
$finalPrice += $this->_applyOptionsPrice($product, $qty, $basePrice) - $basePrice;
$finalPrice = max(0, $finalPrice);
$product->setFinalPrice($finalPrice);
return $finalPrice;
}
public function getPrice($product)
{
#Just return indexed_price, if it's been fetched already
#(which it will have been for collections, but not on product page)
$price = $product->getIndexedPrice();
if ($price !== null) {
return $price;
}
$childProduct = $this->getChildProductWithLowestPrice($product, "finalPrice");
#If there aren't any salable child products we return the lowest price
#of all child products, including any ones not currently salable.
if (!$childProduct) {
$childProduct = $this->getChildProductWithLowestPrice($product, "finalPrice", false);
}
if ($childProduct) {
return $childProduct->getPrice();
}
return false;
}
public function getChildProducts($product, $checkSalable=true)
{
static $childrenCache = array();
$cacheKey = $product->getId() . ':' . $checkSalable;
if (isset($childrenCache[$cacheKey])) {
return $childrenCache[$cacheKey];
}
$childProducts = $product->getTypeInstance(true)->getUsedProductCollection($product);
$childProducts->addAttributeToSelect(array('price', 'special_price', 'status', 'special_from_date', 'special_to_date'));
if ($checkSalable) {
$salableChildProducts = array();
foreach($childProducts as $childProduct) {
if($childProduct->isSalable()) {
$salableChildProducts[] = $childProduct;
}
}
$childProducts = $salableChildProducts;
}
$childrenCache[$cacheKey] = $childProducts;
return $childProducts;
}
/*
public function getLowestChildPrice($product, $priceType, $checkSalable=true)
{
$childProduct = $this->getChildProductWithLowestPrice($product, $priceType, $checkSalable);
if ($childProduct) {
if ($priceType == "finalPrice") {
$childPrice = $childProduct->getFinalPrice();
} else {
$childPrice = $childProduct->getPrice();
}
} else {
$childPrice = false;
}
return $childPrice;
}
*/
#Could no doubt add highest/lowest as param to save 2 near-identical functions
public function getChildProductWithHighestPrice($product, $priceType, $checkSalable=true)
{
$childProducts = $this->getChildProducts($product, $checkSalable);
if (count($childProducts) == 0) { #If config product has no children
return false;
}
$maxPrice = 0;
$maxProd = false;
foreach($childProducts as $childProduct) {
if ($priceType == "finalPrice") {
$thisPrice = $childProduct->getFinalPrice();
} else {
$thisPrice = $childProduct->getPrice();
}
if($thisPrice > $maxPrice) {
$maxPrice = $thisPrice;
$maxProd = $childProduct;
}
}
return $maxProd;
}
public function getChildProductWithLowestPrice($product, $priceType, $checkSalable=true)
{
$childProducts = $this->getChildProducts($product, $checkSalable);
if (count($childProducts) == 0) { #If config product has no children
return false;
}
$minPrice = PHP_INT_MAX;
$minProd = false;
foreach($childProducts as $childProduct) {
if ($priceType == "finalPrice") {
$thisPrice = $childProduct->getFinalPrice();
} else {
$thisPrice = $childProduct->getPrice();
}
if($thisPrice < $minPrice) {
$minPrice = $thisPrice;
$minProd = $childProduct;
}
}
return $minProd;
}
//Force tier pricing to be empty for configurable products:
public function getTierPrice($qty=null, $product)
{
return array();
}
}
نصائح أخرى
/home/outthinking/public_html/upload/em0113-full-package/app/code/core/Mage/Catalog/Model/Product.php
يرجى التحقق من السطر الذي به خطأ فادح، هذا الخطأ الفادح يعني أنك تستدعي أسلوب كائن فارغ.