我是Magento的新用户,我正在创建一个交叉销售模块。
我已经把拥有1件以上产品的所有命令都与之相关联。但是现在,为了完成我的代码和模块,我想知道如何使用超过1篇文章恢复命令并同时接受客户的所有命令(很多客户已经购买1个1的产品)。
对不起我的英语,但我希望你明白。
现在,模块放入一个表(使用cron),每天所有数据但是让我们看看代码:
我的阻止:
class MyCompany_Crosssell_Block_Crosssell extends Mage_Catalog_Block_Product_Abstract {
public function _prepareLayout() {
return parent::_prepareLayout();
}
public function getTitle() {
$title = Mage::getStoreConfig('catalog/crosssell/title');
return $title;
}
public function getEnable() {
return Mage::getStoreConfig('catalog/crosssell/enable');
}
public function getProductsBought(){
return Mage::getModel('MyCompany_crosssell/crosssell')
->getBoughtProducts(Mage::helper('MyCompany_crosssell')->getcollectProductBoughtId(Mage::registry('current_product')))
->setPageSize(Mage::getStoreConfig('catalog/crosssell/products'));
}
}
我的助手:
class Mycompany_Crosssell_Helper_Data extends Mage_Core_Helper_Abstract {
public function getcollectProductBoughtId($product){
return explode(',',Mage::getModel('Mycompany_crosssell/crosssell')->load($product->getId())->getProducttype());
}
}
型号:
class Mycompany_Crosssell_Model_Observer extends Varien_Event_Observer {
public function __construct() {
}
public function crosssell($observer) {
$collection = Mage::getModel('catalog/product')->getCollection()->addAttributeToSelect('*');
$collection->addAttributeToFilter('status', Mage_Catalog_Model_Product_Status::STATUS_ENABLED);
$collection->addFieldToFilter('visibility', Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH);
$connexion = Mage::getSingleton('core/resource')->getConnection('core_write');
$connexion->query("TRUNCATE TABLE `crosssell_crosssell`");
$values = array();
$cpt = 0;
foreach ($collection as $product) {
$productids = Mage::getModel('Mycompany_crosssell/crosssell')->collectProductBoughtId($product);
/* $model = Mage::getModel('Mycompany_crosssell/crosssell');
$model->setData('productid', $product->getId());
$model->setData('producttype', implode(',', $productids));
$model->save(); */
if ($productids) {
$values[] = "(" . $product->getId() . ", '" . implode(',', $productids) . "')";
if ($cpt++ > 500) {
$connexion->query("
INSERT IGNORE INTO `crosssell_crosssell`(productid, producttype) VALUES " . implode(',', $values));
$cpt = 0;
$values = array();
}
}
}
$connexion->query("
INSERT IGNORE INTO `crosssell_crosssell`(productid, producttype) VALUES " . implode(',', $values));
}
}
class Mycompany_Crosssell_Model_Crosssell extends Mage_Core_Model_Abstract {
public function _construct() {
parent::_construct();
$this->_init('Mycompany_crosssell/crosssell');
}
public function collectProductBoughtId($product) {
$_order = '';
$_productOption = array();
$productOption = array();
$_orderId = '';
$_order = Mage::getResourceModel('sales/order_item_collection')
->addAttributeToSelect('*')
->addAttributeToFilter('product_id', $product->getId());
foreach ($_order as $order) {
$_orderId[] = $order->getOrderId();
}
$_product = Mage::getResourceModel('sales/order_item_collection')
->addAttributeToSelect('*')
->addAttributeToFilter('order_id', $_orderId)
->addAttributeToFilter('product_id', array('neq' => $product->getId()));
foreach ($_product as $_productData) {
$_productId[] = $_productData->getProductId();
}
return array_unique($_productId);
}
public function getBoughtProducts($product) {
$collection = Mage::getModel('catalog/product')->getCollection()
->addAttributeToFilter('entity_id', array('in', $product));
Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($collection);
Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($collection);
$attributes = Mage::getSingleton('catalog/config')->getProductAttributes();
$collection->addAttributeToSelect($attributes)
->addMinimalPrice()
->addFinalPrice()
->addTaxPercents();
$collection->getSelect()->order(new Zend_Db_Expr('RAND()'));
return $collection;
}
}
class Mycompany_Crosssell_Model_Mysql4_Crosssell_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract
{
public function _construct(){
$this->_init('Mycompany_crosssell/crosssell');
}
}
class Mycompany_Crosssell_Model_Mysql4_Crosssell extends Mage_Core_Model_Mysql4_Abstract
{
protected function _construct()
{
$this->_init('Mycompany_crosssell/crosssell', 'productid');
}
}
SQL:
<?php
$installer = $this;
$installer->startSetup();
$table = $installer->getConnection()
->newTable($installer->getTable('Mycompany_crosssell/crosssell'))
->addColumn('productid', Varien_Db_Ddl_Table::TYPE_INTEGER, null, array(
'auto_increment' => false,
'identity' => false,
'unsigned' => true,
'nullable' => false,
'primary' => true,
), 'ID product')
->addColumn('producttype', Varien_Db_Ddl_Table::TYPE_VARCHAR, null, array(
'auto_increment' => false,
'identity' => false,
'unsigned' =>false,
'nullable' =>false,
'primary' =>false,
), 'type product');
$installer->getConnection()->createTable($table);
$installer->endSetup();