Извлеките подробную информацию из каталога продукт плоский 1 таблица
В таблице catalog_product_flat_1
мы создали пользовательский столбец custom_uid и сохранение идентификаторов клиентов
Предположим, что приведенное ниже изображение является таблицей catalog_product_flat_1
. Вы можете видеть, что столбцы содержат название продукта и идентификатор клиента.
Мы пытаемся получить информацию о продукте из таблицы catalog_product_flat_1
и пытаемся отобразить ее в разделе Моя учетная запись . но это не привлекательно.
Означает в клиенте с идентификатором 101' учетная запись s, мы попытка отобразить Продукт 1 и продукт 2. & в идентификаторе клиента 102' с учетной записью, мы пытаемся отобразить Продукт 3
Приложение/код/локальный/Удобный/Пример/Блок - List.php
class Amasty_Example_Block_List extends Mage_Core_Block_Template
{
public function __construct() {
parent::__construct();
$idc = Mage::getSingleton('customer/session')->getId();
$customerSavedProductArray = array();
$customerSavedProductArray = Mage::getModel('catalog/product')->getCollection()->addFieldToFilter('custom_uid',$idc)->getColumnValues("name");
// $customerSavedProductArray = Mage::getResourceModel('catalog/product_collection')->addFieldToFilter('custom_uid',$idc)->getColumnValues("name");
$collection = Mage::getModel('catalog/product')->getCollection()->addAttributeToSelect('*')->addAttributeToFilter('entity_id', array("in"=>$customerSavedProductArray));
$collection->load();
$this->setCollection($collection);
}
Пхтмл
<?php echo $this->getMessagesBlock()->getGroupedHtml() ?>
<?php $collections = $this->getCollection(); ?>
<?php $_product = $this->getProduct(); ?>
<?php foreach ($collections as $key => $product) {
echo $product->getName().' <br><br>';
echo $product->getId().'<br><br>';
$_product = Mage::getModel('catalog/product')->load($product->getId());
?>
Обновление
В config.xml, я использовал имя таблицы : catalog_product_flat_1
<?xml version="1.0"?>
<config>
<modules>
<Amasty_Example>
<version>0.1.0</version>
</Amasty_Example>
</modules>
<frontend>
<routers>
<example>
<use>standard</use>
<args>
<module>Amasty_Example</module>
<frontName>example</frontName>
</args>
</example>
</routers>
<layout>
<updates>
<example>
<file>example.xml</file>
</example>
</updates>
</layout>
<events>
<controller_action_predispatch>
<observers>
<Amasty_Example>
<class>example/observer</class>
<method>onControllerActionPredispatch</method>
</Amasty_Example>
</observers>
</controller_action_predispatch>
</events>
</frontend>
<global>
<models>
<example>
<class>Amasty_Example_Model</class>
<resourceModel>example_mysql4</resourceModel>
</example>
<example_mysql4>
<class>Amasty_Example_Model_Mysql4</class>
<entities>
<example>
<table>example</table>
</example>
<mydesign>
<table>catalog_product_flat_1</table>
</mydesign>
</entities>
</example_mysql4>
</models>
<resources>
<example_setup>
<setup>
<module>Amasty_Example</module>
</setup>
<connection>
<use>core_setup</use>
</connection>
</example_setup>
<example_write>
<connection>
<use>core_write</use>
</connection>
</example_write>
<example_read>
<connection>
<use>core_read</use>
</connection>
</example_read>
</resources>
</global>
</config>
1 answers
Во-первых, вы делаете это неправильно.
Вы никогда не должны вручную добавлять столбцы в любую таблицу catalog_product_flat_*
.
Эти таблицы являются просто индексом активных товаров для каждого представления магазина.
При перестроении индексов эти таблицы создаются заново. Если вы добавите к нему столбец, вы потеряете его при следующем переиндексации.
Вы должны добавить атрибут продукта с именем custom_uid
с флагом used in product listing
, установленным в yes
.
Затем все переиндексируйте.
После этого вы можете получить коллекцию продуктов для конкретный клиент, подобный этому:
$customerId = 8; //your customer id here - it can come from session
$collection = Mage::getModel('catalog/product')->
->addAttributeToSelect('*') // instead of * you can put an array with only the attributes you need
->getCollection()->addAttributeToFilter('custom_uid', $customerId);
Затем вы можете просто просмотреть коллекцию и что-то сделать с каждым продуктом, но не используйте load
в цикле foreach.
foreach ($collection as $product) {
//do something with $product
}