Magento获取最近更新商品

Magento最新商品
Magento最新商品

今天google了下,总结了下如何获取Magento每个分类的最近更新商品,根据商品的ID号,倒序排列出最后添加的商品。代码如下

<?php
	$categories = Mage::helper('catalog/category');
	/* @var $helper Mage_Catalog_Helper_Category */
	$categories_collection = $categories->getStoreCategories('name', true, false);
	$categories_url = Mage::helper('catalog/category');
?>

<?php if($categories_collection->getSize()): ?>
    <dl class="new-product">
        <?php foreach ($categories_collection as $_item): ?>

				<dt><a href="<?php echo $categories_url->getCategoryUrl($_item) ?>"><?php echo $_item->name ?></a></dt>

				<?Php
					$p_collection = $_item->getProductCollection();
					$p_collection->addAttributeToSelect(array('name', 'id', 'price', 'url_key', 'small_image'))
					             ->addAttributeToFilter('status', 1)
								 ->addAttributeToFilter('visibility', 4) //catalog, search
								 ->addAttributeToFilter('sku',array("nlike"=>'%CUS001%'))
								 ->setOrder('entity_id', 'DESC')
								 ->getSelect()->limit( 8 );
								 //->setPageSize(10);

				?>
				<?php
				/*foreach ($p_collection as $product) {
						echo $product->getName().'<br />';
						echo $product->getSmallImage().'<br />';

						echo Mage::helper('core')->currency($product->getFinalPrice()).'<br />';
					}*/

				?>
				<?php if($p_collection->getSize()): ?>
				<dd>
				<ul class="new-product-ul">
				<?php foreach ($p_collection as $product): ?>
					<li>
					<a href="<?php echo $product->getProductUrl() ?>" title="<?php echo $this->stripTags($this->getImageLabel($product, 'small_image'), null, true) ?>" class="product-image"><img src="<?php echo $this->helper('catalog/image')->init($product, 'small_image')->resize(200); ?>" width="200"  alt="<?php echo $product->getName(); ?>" /></a>
						<h3 class="product-name"><a href="<?php echo $product->getProductUrl() ?>" title="<?php echo $product->getName(); ?>"><?php echo $product->getName() ?></a></h3>

					<?php echo $this->getPriceHtml($product, true) ?>
					</li>

				<?php endforeach; ?>
				</ul>
				</dd>
				<?php else: ?>
					<dd>
						<p class="note-msg">
							<?php echo $this->__('There are no %s available.', $this->getItemsTitle()); ?>
						</p>
					</dd>

				<?php endif ?>

        <?php endforeach; ?>
    </dl>
<?php else: ?>
    <p class="note-msg">
        <?php echo $this->__('There are no %s available.', $this->getItemsTitle()); ?>
    </p>
<?php endif ?>

继续阅读“Magento获取最近更新商品”

使用SKU过滤Magento的google sitemap

四惠地铁站
四惠地铁站

有些商品不想让进入google的sitemap,我们来看下如何根据sku来过滤Magento的google sitemap。

感谢松泰帮我查了下代码。

1.Magento在前台页面有sitemap页面,页面会显示magento的分类和所有商品,主要是给搜索引擎爬虫来爬的,如果你某些商品不想被抓到,那么不能在这个页面显示出发来。

需要修改的核心文件路径:Mage\Catalog\Block\Seo\Sitemap\Product.php

当然你不能直接修改核心文件,放到code的local文件夹吧。

如下代码,屏蔽sku中带 cus001 的商品

 

    protected function _prepareLayout()
    {
        $collection = Mage::getModel('catalog/product')->getCollection();
        /* @var $collection Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Collection */

        $collection->addAttributeToSelect('name');
        $collection->addAttributeToSelect('url_key');
        $collection->addStoreFilter();

        Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($collection);
        Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($collection);
		$collection->addAttributeToFilter('sku',array("nlike"=>'%cus001%'));
        $this->setCollection($collection);

        return $this;
    }

如上的 $collection 添加了 去掉sku中包含 cus001 的商品。

2.需要屏蔽的第二个地方在网站声称的google sitemap的xml文件,此文件也是让搜索引擎抓取的,所以需要屏蔽。

需要的修改的核心文件路径为:Mage\Sitemap\Model\Resource\Catalog\Product.php

    public function getCollection($storeId)
    {
        $products = array();

        $store = Mage::app()->getStore($storeId);
        /* @var $store Mage_Core_Model_Store */

        if (!$store) {
            return false;
        }

        $urCondions = array(
            'e.entity_id=ur.product_id',
            'ur.category_id IS NULL',
            $this->_getWriteAdapter()->quoteInto('ur.store_id=?', $store->getId()),
            $this->_getWriteAdapter()->quoteInto('ur.is_system=?', 1),
        );
        $this->_select = $this->_getWriteAdapter()->select()
            ->from(array('e' => $this->getMainTable()), array($this->getIdFieldName()))
            ->join(
                array('w' => $this->getTable('catalog/product_website')),
                'e.entity_id=w.product_id',
                array()
            )
            ->where('w.website_id=?', $store->getWebsiteId())
            ->joinLeft(
                array('ur' => $this->getTable('core/url_rewrite')),
                join(' AND ', $urCondions),
                array('url' => 'request_path')
            );

        $this->_addFilter($storeId, 'visibility', Mage::getSingleton('catalog/product_visibility')->getVisibleInSiteIds(), 'in');
        $this->_addFilter($storeId, 'status', Mage::getSingleton('catalog/product_status')->getVisibleStatusIds(), 'in');
		$this->_select->where("e.sku not like '%cus001%'");
        $query = $this->_getWriteAdapter()->query($this->_select);
        while ($row = $query->fetch()) {
            $product = $this->_prepareProduct($row);
            $products[$product->getId()] = $product;
        }

        return $products;
    }

上面代码也屏蔽掉了sku中带 cus001 的商品。

转载表明出处:www.hellokeykey.com

在Magento上实现高级定制

Magento实现高级定制
Magento实现高级定制

 

什么是本文讲的高级定制?

如上图,用户可以通过下拉菜单选择颜色和尺码来购买商品。但是用户发现自己的身材和商品提供的尺码表不一样(比如用户选了M码的尺寸,但是一对应尺码表发现,肩宽合适,但是腰围不合适),需要按照自己的尺寸来定制,就要手动输入,往往我们就叫这个定制功能为高级定制。

那么如何来实现高级定制呢?下面我来说下。

商品A信息:

SKU编号:AAAA

颜色(下拉菜单dropdown):红 黄 蓝

尺码(下拉菜单dropdown):X,L,M

商品B信息:

SKU编号:AAAA-CUS

颜色(下拉菜单dropdown):红 黄 蓝

尺码1(输入框input):

尺码2(输入框input):

尺码3(输入框input):

尺码4(输入框input):

…………..

尺码N(输入框input):

 

通过对比上面的数据,可以发现我在SKU上做了文章,B商品的SKU是A商品的SKU后面增加“-CUS”。B商品的尺码是用户可以自己输入的。

实现原理:

1.如果A商品需要高级定制功能,那么必须有与之对应的B商品存在,两者在SKU上必须存在上面所说的规律。B商品建议设置为前台不可见,搜索不可见。

2.在A商品页面的时候,用程序获取A商品的SKU。比如获取A商品的sku是”123″,那么就通过程序来判断sku“123-CUS”的商品是否存在,如果存在就说明A商品可以进行高级定制。

3.通过SKU获取B商品的数据,生成输入框和加入购物车按钮构建<form>,可以去看下B商品的form是如何写的。

4.当用户下单后其实购买的是B商品,所以在购物车定地方点击商品的链接会返回B商品的页面,请保持B商品信息的完整。

5.如果定制商品要用户付额外费用,无论你B商品是从后台添加的还是靠CSV批量添加的,都要做相应的处理,你可以直接增加B商品的价格,也可以在自定义选项(custom options)上做文章。

在自定义选项上你可以设置增加10元,也可以设置减少10元,你做一些促销活动,互动活动就会非常的方便,只需要程序上处理下即可实现价格增减。所以建议将价格设置到自定义选项中。

 

代码片段:在view.phtml文件中如何通过A商品的sku获取B到商品

$s = $_product->getSku().'-CUS';
$p_ID = Mage::getModel('catalog/product')->getIdBySku($s);
$product = Mage::getModel("catalog/product")->load($p_ID);

如何输出B商品的form
继续阅读“在Magento上实现高级定制”

Magento批量导入输入框

Magento批量导入输入框
Magento批量导入输入框

我博客之前讲到了Magento如何批量导入图片,批量导入下拉菜单,那么如何批量导入输入框呢?如上图

对于批量导入不熟悉,可以参看我博客的批量导入文章:

3.Magento导入多图,自定义选项 (3)

下面我们来看下CSV的关键字段应该如何写,如下图

magento批量导入输入框CSV文件
magento批量导入输入框CSV文件

我们可以看字段中到Size和Color为前台显示的输入框标题,如本文开始处的图片所示。field表示这是输入框,1表示此处为必填项。

他们的值 :fixed:-5::35 第一个分号前面留空,此处值不重要所以留空,fixed:-5 表示填写此项减少5元,fixed:10表示填写此项增加5元金额,这也如文章开始出的图片所示。35表示此输入框最多可以输入35个单位的字。如果大家有更多输入框,可以照此格式继续添加。

注意书写CSV的时候使用UTF8编码,英文字符。

相关文章参考:http://sourceforge.net/apps/mediawiki/magmi/index.php?title=Custom_Options

继续阅读“Magento批量导入输入框”

在Magento的描述中显示当前商品图片

magento move more views to description
magento move more views to description

 

如何在商品的描述中添加商品的图片呢?当然可以。修改后效果如上图。

本例使用magento 1.6来进行举例,其它版本可能稍有不同。

打开你的当前模板文件中的:template\catalog\product\view\ description.phtml

添加显示图片的代码,修改后代码如下:

<?php $_description = $this->getProduct()->getDescription(); ?>
<?php if ($_description): ?>
        <?php echo $this->helper('catalog/output')->productAttribute($this->getProduct(), $_description, 'description') ?>
		<?php if (count($this->getProduct()->getMediaGalleryImages()) > 0): ?>

				<ul>
				<?php foreach ($this->getProduct()->getMediaGalleryImages() as $_image): ?>
					<li>
						<img src="<?php echo $this->helper('catalog/image')->init($this->getProduct(), 'thumbnail', $_image->getFile())->resize(500); ?>" alt="<?php echo $this->htmlEscape($_image->getLabel()) ?>" />
					</li>
				<?php endforeach; ?>
				</ul>

		<?php endif; ?>
<?php endif; ?>

你可以修改图片的尺寸以配合你的页面宽度。

继续阅读“在Magento的描述中显示当前商品图片”

Magento 使用Api将Sku添加到Url中

Magento api add sku to url
Magento api add sku to url

使用Magento Api修改商品Url路径的测试程序,希望对大家理解Api有帮助.

主要目的是通过Api去将商品的sku编号加到商品Url的后面,批量来更新Url,代码如下。

<?php
$proxy = new SoapClient('http://www.yourdomain.com/api/soap/?wsdl');
$session = $proxy->login('username', 'abc1234');

//获取全部商品
$products = $proxy->call($session, 'product.list');
//print_r($products);
echo count($products);
$i = 0;
foreach($products as $product)
{
$i++;
if($i>249 && $i<300)
{
echo $product[sku]."-Start<br />";
//获取商品url
$product_one = $proxy->call($session, 'product.info', $product[sku]);
//print_r($proxy->call($session, 'product.info', $product[sku]));
$new_url = $product_one[url_path].'-'.strtolower($product[sku]);
echo $proxy->call($session, 'catalog_product.update', array($product[sku], array('url_path'=> $new_url)));
echo $proxy->call($session, 'catalog_product.update', array($product[sku], array('url_key'=> $new_url)));

//print_r($proxy->call($session, 'product.info', $product[sku]));
//echo $new_url;
echo $product[sku]."-OK-".$i."<br />";
}
//break;
}

//获取商品sku
//$proxy->call($session, 'product.info', 'sku');

转载标明出处:www.hellokeykey.com

Magento给商品页面的tabs添加tab

magento商品页面添加tab
magento商品页面添加tab

Magento的modern模板的商品详情页面有个Tabs,既然是原生的,那拿到别的模板去用就很方便,那么如何向这个tab中添加新的tab项目呢,如上图。

我来演示下我的添加步骤的,大家照猫画虎即可,添加多少个也木有关系。

第一步:修改模板layout/catalog.xml文件,代码片段如下

继续阅读“Magento给商品页面的tabs添加tab”

Magento导入多图,自定义选项(3)

magento批量导入
magento批量导入

现在已经有视频教程,详见:http://www.hellokeykey.com/magento-chinese-tutorial-video/

如果你没有看前两篇介绍批量导入的文章,请先阅读前两篇文章。
Magento导入多图,自定义选项
Magento导入多图,自定义选项 (2)

在使用这个插件导入自定义选项的时候,我们发现导入的自定义选项的顺序,是按照字母顺序排列的。

比如,我们导入颜色下拉菜单,我们csv文件中的属性顺序是:  red,blue,white。但是导入后我们发现他们的顺序已经变成了:blue,red,white。也就是会按照字母的顺序来排列。

我们需要修改其插件代码,来fix这个问题。

需要修改的插件文件路径: app\code\community\CapacityWebSolutions\ImportProduct\Model\Convert\Adapter\product.php

代码片段说明:在大概132行的位置,添加 $i 变量,在大概210行位置,将sort_order的值换为$i++,这样就会按照导入顺序给导入值设置排序的权重。

	$i = 0;
        foreach ($importData as $field => $value) {
            if (in_array($field, $this->_inventoryFields)) {
                continue;
            }
            if (in_array($field, $this->_imageFields)) {
                continue;
            }
            $attribute = $this->getAttribute($field);
          	if (!$attribute) {

				if(strpos($field,':')!==FALSE && strlen($value)) {
				   $values=explode('|',$value);
				   if(count($values)>0) {
					  @list($title,$type,$is_required,$sort_order) = explode(':',$field);
					  $title = ucfirst(str_replace('_',' ',$title));
					  $custom_options[] = array(
						 'is_delete'=>0,
						 'title'=>$title,
						 'previous_group'=>'',
						 'previous_type'=>'',
						 'type'=>$type,
						 'is_require'=>$is_required,
						 'sort_order'=>$sort_order,
						 'values'=>array()
					  );
					  foreach($values as $v) {
						 $parts = explode(':',$v);
						 $title = $parts[0];
						 if(count($parts)>1) {
							$price_type = $parts[1];
						 } else {
							$price_type = 'fixed';
						 }
						 if(count($parts)>2) {
							$price = $parts[2];
						 } else {
							$price =0;
						 }
						 if(count($parts)>3) {
							$sku = $parts[3];
						 } else {
							$sku='';
						 }
						 if(count($parts)>4) {
							$sort_order = $parts[4];
						 } else {
							$sort_order = 0;
						 }
						 switch($type) {
							case 'file':
							     break;

							case 'field':
							case 'area':
							   $custom_options[count($custom_options) - 1]['max_characters'] = $sort_order;

							case 'date':
							case 'date_time':
							case 'time':
							   $custom_options[count($custom_options) - 1]['price_type'] = $price_type;
							   $custom_options[count($custom_options) - 1]['price'] = $price;
							   $custom_options[count($custom_options) - 1]['sku'] = $sku;
							   break;

							case 'drop_down':
							case 'radio':
							case 'checkbox':
							case 'multiple':
							default:
							   $custom_options[count($custom_options) - 1]['values'][]=array(
								  'is_delete'=>0,
								  'title'=>$title,
								  'option_type_id'=>-1,
								  'price_type'=>$price_type,
								  'price'=>$price,
								  'sku'=>$sku,
								  'sort_order'=>$i++,
							   );
							   break;
						 }
					  }
				   }
				}

                continue;
            }

 

 

继续阅读“Magento导入多图,自定义选项(3)”

Magento导入多图,自定义选项 (2)

现在已经有视频教程,详见:http://www.hellokeykey.com/magento-chinese-tutorial-video/

今天试了下Magento 1.6 批量导入商品代多图和自定义选项,这侧导入是基于我上一篇文章,分享下操作注意事项。

请先阅读我的上一遍文章:Magento导入多图,自定义选项

首先来看下,我导出商店说有商品的设置,下面截图页面为Magento后台 System -> Import/Export -> Dataflow – Profiles 中的 Profile Wizard 栏目。我先说导出是因为有的人是先批量导出已经有的商品,编辑后再批量更新。

Magento Export field mapping
Magento Export field mapping

*注意图中的红色部分。

导出的文件,我们需要修改下,修改后的示例:Magento多图自定义选项批量导入CSV示例文件

此文件只是示例,大家根据自己情况来修改下,然后就可以用了。此示例只包含一个自定义属性。

使用编辑器打开(我使用Notepad++),我们可以注意到它的标点特点如下面截图。

Magento批量导入CSV文件示例细节
Magento批量导入CSV文件示例细节

我们可以看到如果一个属性的值是两个,要有英文的双引号,其它的属性只有一个值的均没有双引号。

在批量导入的时候,Magento会提示某个属性值是不合法的,但其实不一定是他提示的那个值有问题,可能是他相邻的几个属性的值有问题。这个问题产生有两种可能,一个可能就是编码问题,比如这个值是法语的,德语的,程序无法识别。还有一种可能就是这个双引号的问题,这里大家要注意。

如何导入多个自定义选项?
示例:Size:drop_down:1,Color:drop_down:1

在CSV中多一列属性既可以增加一个自定义选项。

 

报告有属性值不正确,或者报错怎么回事?

如报警“Skip import row, required field “sku” not defined”,这不一定是sku的值有问题,有可能是编码原因造成的。

请使用UTF8编码编写您的csv文件,我使用Notepad++的编码转换功能将CSV文件存为UTF8格式,这会减少因为 法语、西班牙语等非英文语种因为编码造成的此类报警。并且当一个属性有多个值的时候,如果有报警属性值不正确,请尝试用英文双引号将值括起来。

 

大家可以使用excel来编辑csv文件,但是大家要使用别的编辑器如“记事本”(我使用Notepad++)来看下文件是否有乱码,是否有的值双引号没有,是否编码有问题,Magento批量导入支持UTF-8 和 ANSI这两种编码。

建议大家一个分类一个CSV文件,这样更好操作些。

如果你要使用Magento批量导入的Dataflow – Advanced Profiles

本文的Actions XML可以参考此文件:Magento-Actions-xml
继续阅读“Magento导入多图,自定义选项 (2)”

Magento导入多图,自定义选项

magento批量导入
magento批量导入

现在已经有视频教程,详见:http://www.hellokeykey.com/magento-chinese-tutorial-video/

Magento批量导入是很多人关心的问题,因为面对成千上万件商品需要管理,还是批量操作方便些。

对于magento自带的批量导入功能,只能算是基础的导入功能,不包含多张图片与自定义选项(例如:尺码,颜色的选择)的功能。

现在有个插件可以帮助大家完成多张图片与自定义选项的批量导入。

插件地址:http://www.magentocommerce.com/magento-connect/import-products-categories-multiple-images-and-custom-options.html

此插件在插件说明部分详细说明了如何操作并且给出了CSV的示例文件,大家正好可以使用此CSV文件了解批量导入表有哪些属性,如何书写。

CSV文件编辑是要保持文件编码和分号逗号使用规律,建议试验没有问题后再批量的编辑商品,并可以时不时的在测试站测试下。CSV编辑器推荐:http://csved.sjfrancke.nl/ 用着感觉很不错

网上批量导入文章很多,详细操作大家可以google下,有时间我出个视频。

导入的自定义属性,比如导入尺码,存在尺码按照字母顺序排的问题,这是这个插件需要fix的地方。

继续阅读“Magento导入多图,自定义选项”