Magento: Показать цены уровня на странице списка категорий - PullRequest
6 голосов
/ 03 августа 2011

Я пытаюсь отобразить все ценовые уровни на странице списка категорий (catalog / product / list.phtml), но получаю только базовую цену для одного продукта.

print_r($_product->getTierPrice());

возвращает:

Array
(
    [0] => Array
        (
            [price] => 0.5000
            [website_price] => 0.5000
            [price_qty] => 1
            [cust_group] => 32000
        )

)

за каждый товар.На странице информации о продукте это работает без проблем.Пожалуйста, сообщите.

ver.1.5.0.1

ОБНОВЛЕНИЕ:

Вот решение проблемы, вдохновленное ответом ниже:

$resource = Mage::getSingleton('core/resource');
$query = 'SELECT * FROM ' . $resource->getTableName('catalog/product') . '_tier_price';
$_tier_prices = $resource->getConnection('core_read')->fetchAll($query);
var_dump($_tier_prices);

Ответы [ 7 ]

6 голосов
/ 28 апреля 2015

Это еще один способ получить цены уровня

Mage::getResourceModel('catalog/product_attribute_backend_tierprice')
            ->loadPriceData($product_id,Mage::app()->getWebsite()->getId());

Ответ - массив с ценами

[0] => Array
    (
        [price_id] => 7
        [website_id] => 0
        [all_groups] => 1
        [cust_group] => 0
        [price] => 32.0000
        [price_qty] => 6.0000
    )

[1] => Array
    (
        [price_id] => 8
        [website_id] => 0
        [all_groups] => 1
        [cust_group] => 0
        [price] => 31.0000
        [price_qty] => 12.0000
    )
5 голосов
/ 12 ноября 2013

Если вы ищете способ Magento:

 $attribute = $_product->getResource()->getAttribute('tier_price');

    if ($attribute) {
       $attribute->getBackend()->afterLoad($_product);
       $tierPrices = $_product->getTierPrice();
    }

С /app/code/core/Mage/Catalog/Model/Product/Type/Price.php getTierPrice()

3 голосов
/ 06 декабря 2012

Прошло много времени с тех пор, как об этом спросили / ответили, но мне просто нужно было сделать это и найти лучший способ, чтобы не использовать прямой доступ к базе данных.

Как упоминалось ранее, объект $ _product по умолчанию не содержит $ _tierPrices на странице списка продуктов ... но если вы установите значение tier_price в значение null, он получит фактические значения из базы данных и заполнит объект , Поэтому, где бы вам ни понадобились цены уровня, добавьте:

$_product->setData('tier_price',null);
$_tierPrices = $this->getTierPrices($_product); 

Это должно обеспечить заполнение цен на уровне объекта, чтобы вы могли использовать его на любой странице.

Только учтите, что это все равно приводит к тому же снижению производительности, что и прямой доступ к БД.

1 голос
/ 22 октября 2016

В приложении / design / frontend / your_theme / default / template / catalog / product / list.phtml добавьте это в циклы foreach для сетки и / или списка

<?php $this->setProduct(Mage::getModel('catalog/product')->setStoreId(Mage::app()->getStore()->getId())->load($_product->getId()))?>
<?php echo $this->getTierPriceHtml() ?> 
1 голос
/ 01 ноября 2013

Я попробовал ответы выше и некоторые другие онлайн, но ни один из них не сработал, поэтому я собрал несколько хаков в 1, и вот как вы можете заставить его работать где угодно.У меня даже есть собственная Карусель Домашней страницы, которая тянет ее вот так.

1.Вы начинаете с того, что устанавливаете соединение где-то в верхней части петли

$wh_resource = Mage::getSingleton('core/resource');
$wh_readConnection = $wh_resource->getConnection('core_read');

2.Получить идентификатор клиента

$wh_customer = Mage::getSingleton('customer/session')->getCustomer();
$wh_id = $wh_customer->getGroupId();

3.Далее мы перейдем к циклу, где у вас есть цена эхо

Примечание: ниже я использую жесткий код 2, потому что Оптом по умолчанию является 2Вы можете создать свой собственный, если / else & query

if($wh_id == 2){
//get id
$_eid = $_helper->productAttribute($_product, $_product->getId(), 'entity_id');
$wh_query = 'SELECT * FROM catalog_product_entity_group_price WHERE entity_id = '.$_eid.' LIMIT 1';
$wh_results = $wh_readConnection->fetchAll($wh_query);
//var_dump($wh_results);
/* var dump would look like this
array(1) { [0]=> 
    array(6) { 
    ["value_id"]=> string(1) "1" 
    ["entity_id"]=> string(1) "3" 
    ["all_groups"]=> string(1) "0" 
    ["customer_group_id"]=> string(1) "2" 
    ["value"]=> string(6) "9.5000" 
    ["website_id"]=> string(1) "0" 
    } 
}
*/
$wh_price = substr($wh_results[0]["value"], 0, -2); // this damn database gives us extra 00
echo '<div class="price-box"><span class="regular-price"><span class="price">$'.$wh_price.'</span></span></div>';
} else {
//not wholesale
echo $this->getPriceHtml($_product, true);
}

Ну, вот как я это сделал.Не стесняйтесь обращаться ко мне, если вам нужна помощь

1 голос
/ 04 августа 2011

Все объекты в Magento потенциально могут быть созданы по-разному на разных страницах и иметь разные данные в них. Сначала это может показаться не интуитивным. Бывает, что в запросе db, который загружает данные в объект $ _product на странице Item, содержатся почти все данные. Но в целях оптимизации $ _product, используемый на странице категории, содержит только некоторые данные - и, если я правильно помню, он даже извлекает данные из разных таблиц БД. Например, запрос на странице категории объединяется с таблицами catalogindex * для некоторых данных, которые обычно извлекаются из обычной таблицы eav.

У меня нет никаких подробностей, чтобы дать вам, но вы можете посмотреть на запросы непосредственно к таблице catalog_product_entity_tier_price, которая имеет все ценовые уровни. По крайней мере, это имя таблицы в моей версии magento, а не 1.5. Побочным эффектом будет то, что страница категории будет загружаться дольше из-за дополнительных запросов / запросов.

0 голосов
/ 03 августа 2011

Перейдите в Управление атрибутами и отредактируйте атрибуты, которые вы хотите отображать.

Возможно, продукты не отображаются в списке продуктов, поскольку они не были настроены для этого, поэтому на странице редактирования атрибута проверьте, активирован ли он:

Используется в перечне продуктов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...