13

Magento开启模板提示

Author 紫月蓝骋    Category Magento     Tags

Magneto模板提示对于开发很有用,今天很多人问起,在这里写下。
打开后台system——>Configuration,左边最后的选项 developer。不要忘记选择左上角的商店。
在debug选项中的Template Path Hints选择为yes就可以了。
magento模板提示
到magento前台看看效果吧

12

Magento热门免费插件——Fooman Speedster

Author 紫月蓝骋    Category Magento插件     Tags

Magento热门免费插件——Fooman Speedster对于提高网站速度有一定的作用,可以合并js,css。http://www.magentocommerce.com/magento-connect/FOOMAN/extension/457/fooman-speedster有需要的可以尝试下。

11

Magento1.4.1.0出来了

Author 紫月蓝骋    Category Magento     Tags

Magento终于更新了,今天惊喜的发现Magento更新到1.4.1.0了。明天会翻译下,更新的相关内容……

10

Magento增加布局文件

Author 紫月蓝骋    Category Magento模板     Tags

Magento的布局文件一般在用的就4个,1column.phtml,2columns-left.phtml,2columns-right.phtml,3columns.phtml.今天magento互助群里有人问是不是可以弄4列的。那样就需要自己增加布局文件了。里面具体怎么布,就看你的需求了。我这里讲下如何增加magento布局文件
一、新建一个布局文件newcolumn.phtml。

二、在layout\page.xml中标签里加以下代码,其中有其他布局文件的写法,可以仿照。

1
2
3
4
5
6
7
8
   <page_new_columns translate="label">
        <label>All new-Column Layout Pages</label>
        <reference name="root">
            <action method="setTemplate"><template>page/newcolumn.phtml</template></action>
            <!-- Mark root page block that template is applied -->
            <action method="setIsHandle"><applied>1</applied></action>
        </reference>
    </page_new_columns>

三、在code\core\mage\page\etc\congig.xml中47行这个标签里加入以下代码,同样有其他布局文件的写法,可参考

    <new_columns module="page" translate="label">
                    <label>new column</label>
                    <template>page/new.phtml</template>
                    <layout_handle>page_new_columns</layout_handle>
    </new_columns>

这样就可以了,在Magento后台选择layout的时候 就会多一项new cloumn的选项。

7

Magento产品多图片批量上传

Author 紫月蓝骋    Category Magento     Tags

Magento添加产品是件很头疼的事情,因此我们就就需要批量上传。magento默认不支持多图片批量上传,要经过一些修改才可以,我转载了magentochina蟋蟀的文章过来,嘿嘿……

一、到/app/etc/modules/ 目录下创建文件并命名为YDL_ImportMultipleImages.xml 该文件会告诉Magento你有这样的模块,以及它的位置。

1
2
3
4
5
6
7
8
9
<?xml version="1.0"?>
<config>
    <modules>
        <YDL_ImportMultipleImages>
            <active>true</active>
            <codePool>local</codePool>
        </YDL_ImportMultipleImages>
    </modules>
</config>

二、创建文件 /app/code/local/YDL/ImportMultipleImages/etc/config.xml

这个文件是你的模块配置文件。它告诉 Magento哪个阶级我们将重写。详细点就是到你的/app/code/local 先新建YDL文件夹,再进入YDL里面新建 ImportMultipleImages 文件夹,接着再进入里面新建etc文件夹,最后进入新建config.xml 文件.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version="1.0"?>
<config>
<modules>
<YDL_ImportMultipleImages>
<version>0.1.0</version>
</YDL_ImportMultipleImages>
</modules>
<global>
<models>
<catalog>
<rewrite>
<!-- Override Mage_Catalog_Model_Convert_Adapter_Product -->
<convert_adapter_product>YDL_ImportMultipleImages_Model_Convert_Adapter_Product</convert_adapter_product>
</rewrite>
</catalog>
</models>
</global>
</config>

三、创建文件 /app/code/local/YDL/ImportMultipleImages/Model/Convert/Adapter/Product.php 此文件中扩大了saveRow() 类方法,这样保证了当你的magento升级后仍然能够使用多图片批量上传功能。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
<?php
/**
 * Import Multiple Images during Product Import
 *
 */
 
class YDL_ImportMultipleImages_Model_Convert_Adapter_Product extends Mage_Catalog_Model_Convert_Adapter_Product
{
 /**
 * Save product (import)
 *
 * @param array $importData
 * @throws Mage_Core_Exception
 * @return bool
 */
 public function saveRow(array $importData)
 {
 $product = $this->getProductModel()
 ->reset();
 
 if (empty($importData['store'])) {
 if (!is_null($this->getBatchParams('store'))) {
 $store = $this->getStoreById($this->getBatchParams('store'));
 } else {
 $message = Mage::helper('catalog')->__('Skip import row, required field "%s" not defined', 'store');
 Mage::throwException($message);
 }
 }
 else {
 $store = $this->getStoreByCode($importData['store']);
 }
 
 if ($store === false) {
 $message = Mage::helper('catalog')->__('Skip import row, store "%s" field not exists', $importData['store']);
 Mage::throwException($message);
 }
 
 if (empty($importData['sku'])) {
 $message = Mage::helper('catalog')->__('Skip import row, required field "%s" not defined', 'sku');
 Mage::throwException($message);
 }
 $product->setStoreId($store->getId());
 $productId = $product->getIdBySku($importData['sku']);
 
 if ($productId) {
 $product->load($productId);
 }
 else {
 $productTypes = $this->getProductTypes();
 $productAttributeSets = $this->getProductAttributeSets();
 
 /**
 * Check product define type
 */
 if (empty($importData['type']) || !isset($productTypes[strtolower($importData['type'])])) {
 $value = isset($importData['type']) ? $importData['type'] : '';
 $message = Mage::helper('catalog')->__('Skip import row, is not valid value "%s" for field "%s"', $value, 'type');
 Mage::throwException($message);
 }
 $product->setTypeId($productTypes[strtolower($importData['type'])]);
 /**
 * Check product define attribute set
 */
 if (empty($importData['attribute_set']) || !isset($productAttributeSets[$importData['attribute_set']])) {
 $value = isset($importData['attribute_set']) ? $importData['attribute_set'] : '';
 $message = Mage::helper('catalog')->__('Skip import row, is not valid value "%s" for field "%s"', $value, 'attribute_set');
 Mage::throwException($message);
 }
 $product->setAttributeSetId($productAttributeSets[$importData['attribute_set']]);
 
 foreach ($this->_requiredFields as $field) {
 $attribute = $this->getAttribute($field);
 if (!isset($importData[$field]) && $attribute && $attribute->getIsRequired()) {
 $message = Mage::helper('catalog')->__('Skip import row, required field "%s" for new products not defined', $field);
 Mage::throwException($message);
 }
 }
 }
 
 $this->setProductTypeInstance($product);
 
 if (isset($importData['category_ids'])) {
 $product->setCategoryIds($importData['category_ids']);
 }
 
 foreach ($this->_ignoreFields as $field) {
 if (isset($importData[$field])) {
 unset($importData[$field]);
 }
 }
 
 if ($store->getId() != 0) {
 $websiteIds = $product->getWebsiteIds();
 if (!is_array($websiteIds)) {
 $websiteIds = array();
 }
 if (!in_array($store->getWebsiteId(), $websiteIds)) {
 $websiteIds[] = $store->getWebsiteId();
 }
 $product->setWebsiteIds($websiteIds);
 }
 
 if (isset($importData['websites'])) {
 $websiteIds = $product->getWebsiteIds();
 if (!is_array($websiteIds)) {
 $websiteIds = array();
 }
 $websiteCodes = split(',', $importData['websites']);
 foreach ($websiteCodes as $websiteCode) {
 try {
 $website = Mage::app()->getWebsite(trim($websiteCode));
 if (!in_array($website->getId(), $websiteIds)) {
 $websiteIds[] = $website->getId();
 }
 }
 catch (Exception $e) {}
 }
 $product->setWebsiteIds($websiteIds);
 unset($websiteIds);
 }
 
 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) {
 continue;
 }
 
 $isArray = false;
 $setValue = $value;
 
 if ($attribute->getFrontendInput() == 'multiselect') {
 $value = split(self::MULTI_DELIMITER, $value);
 $isArray = true;
 $setValue = array();
 }
 
 if ($value && $attribute->getBackendType() == 'decimal') {
 $setValue = $this->getNumber($value);
 }
 
 if ($attribute->usesSource()) {
 $options = $attribute->getSource()->getAllOptions(false);
 
 if ($isArray) {
 foreach ($options as $item) {
 if (in_array($item['label'], $value)) {
 $setValue[] = $item['value'];
 }
 }
 }
 else {
 $setValue = null;
 foreach ($options as $item) {
 if ($item['label'] == $value) {
 $setValue = $item['value'];
 }
 }
 }
 }
 
 $product->setData($field, $setValue);
 }
 
 if (!$product->getVisibility()) {
 $product->setVisibility(Mage_Catalog_Model_Product_Visibility::VISIBILITY_NOT_VISIBLE);
 }
 
 $stockData = array();
 $inventoryFields = isset($this->_inventoryFieldsProductTypes[$product->getTypeId()])
 ? $this->_inventoryFieldsProductTypes[$product->getTypeId()]
 : array();
 foreach ($inventoryFields as $field) {
 if (isset($importData[$field])) {
 if (in_array($field, $this->_toNumber)) {
 $stockData[$field] = $this->getNumber($importData[$field]);
 }
 else {
 $stockData[$field] = $importData[$field];
 }
 }
 }
 $product->setStockData($stockData);
 
 $imageData = array();
 foreach ($this->_imageFields as $field) {
 if (!empty($importData[$field]) && $importData[$field] != 'no_selection') {
 if (!isset($imageData[$importData[$field]])) {
 $imageData[$importData[$field]] = array();
 }
 $imageData[$importData[$field]][] = $field;
 }
 }
 
 foreach ($imageData as $file => $fields) {
 try {
 $product->addImageToMediaGallery(Mage::getBaseDir('media') . DS . 'import' . $file, $fields);
 }
 catch (Exception $e) {}
 }
 
 /**
 * Allows you to import multiple images for each product.
 * Simply add a 'gallery' column to the import file, and separate
 * each image with a semi-colon.
 */
 try {
 $galleryData = explode(';',$importData["gallery"]);
 foreach($galleryData as $gallery_img)
 /**
 * @param directory where import image resides
 * @param leave 'null' so that it isn't imported as thumbnail, base, or small
 * @param false = the image is copied, not moved from the import directory to it's new location
 * @param false = not excluded from the front end gallery
 */
 {
 $product->addImageToMediaGallery(Mage::getBaseDir('media') . DS . 'import' . $gallery_img, null, false, false);
 }
 }
 catch (Exception $e) {}        
 /* End Modification */
 
 $product->setIsMassupdate(true);
 $product->setExcludeUrlRewrite(true);
 
 $product->save();
 
 return true;
 }
}

四、在编写好你的csv文件后,需要在你的csv文件里增加一列并命名为gallery,然后在此列中把你想要上传的产品图片分别用半角英文分号“;” 隔开,举个例子吧:

你的gallery 这一列 必需类似于 / image1.jpg;/ image2.jpg;/ image3.jpg。你可以在后台->系统(System)->设置(Configuration)->高级(Advanced)里面高级选项-“模块输出”里看到你添加的模块 ydl_ImportMultipleImages。只要你csv文件里的其它产品属性字段没有错误,保证你的多个图片能成功的显示在你的 magento网店中。
Magento批量上传图片已经成功了。

转载自:Magnetochina

3

Magento菜单-Magento top link添加首页

Author 紫月蓝骋    Category Magento模板     Tags

Magento 菜单加上首页比较简单,打开top.phtml

1
2
3
<ul id="nav">
  <?php echo $_menu; ?>
</ul>

改成

1
2
3
4
<ul id="nav">
  <li class="level0"><a href="<?php echo $this->getBaseUrl() ?>"><span>首页</span></a></li>
  <?php echo $_menu; ?>
</ul>

就是添加了一个首页的li。
给top link加首页的话,要在customer.xml里修改,把49行的

1
2
3
4
5
6
<default>
   <!-- Mage_Customer -->
   <reference name="top.links">
     <action method="addLink" translate="label title" module="customer"><label>My Account</label><url helper="customer/getAccountUrl"/><title>My Account</title><prepare/><urlParams/><position>10</position></action>
    </reference>
</default>

改成

1
2
3
4
5
6
7
8
<default>
   <!-- Mage_Customer -->
   <reference name="top.links">
   <action method="addLink" translate="label title" module="customer"><label>Home</label><url></url><title>Home</title><prepare>true</prepare><urlParams/><position>5</position></action>
 
     <action method="addLink" translate="label title" module="customer"><label>My Account</label><url helper="customer/getAccountUrl"/><title>My Account</title><prepare/><urlParams/><position>10</position></action>
    </reference>
</default>

Magento很多东西都是要在xml中修改的,小小感叹下我还是很多东西都不会。

2

浏览器兼容——CSS Hack

Author 紫月蓝骋    Category 前端相关, 未分类     Tags ,

通过CSS Hack解决各浏览器的兼容问题,是现在普遍采用的方法。我分享一些常用的CSS Hack写法。

1
2
3
4
<!--[if IE6]-->……<![endif]-->  
<!--[if IE7]-->……<![endif]-->  
<!--[if IE8]-->……<![endif]-->  
<!--[if !IE]-->……<![endif]-->
1
2
3
4
5
6
7
 .csshack{  
         padding:10px; 
         padding:9px\9; /* 所有 ie */  
        *padding:5px; /* ie6和ie7 */ 
         +padding:7px; /* ie7 */ 
        _padding:6px; /* ie6 */ 
         }

这些是比较常用的CSS Hack写法,可以解决大部分兼容问题。但我个人认为,应该从根本入手,而不是单单依靠CSS Hack。

1

Magento Google Sitemap 的配置

Author 紫月蓝骋    Category Magento     Tags

Magento 自带googl sitemap,进入后台 System—>Configuration—>Google Sitemap

magento sitemap

其他的就不多说了,应该都知道怎么做了。

31

Magento去掉左栏和右栏的广告图片

Author 紫月蓝骋    Category Magento     Tags

Magento去掉左栏和右栏的广告图片,这个问题有很多人在问,所以分享下方法。
去掉这两个广告图片,需要我们对Magento结构的了解,左栏和右栏的内容都是在catalog.xml里控制的。在52行,去掉这个block

1
2
3
4
5
            <block type="core/template" name="left.permanent.callout" template="callouts/left_col.phtml">
                <action method="setImgSrc"><src>images/media/col_left_callout.jpg</src></action>
                <action method="setImgAlt" translate="alt" module="catalog"><alt>Our customer service is available 24/7. Call us at (555) 555-0123.</alt></action>
                <action method="setLinkUrl"><url>checkout/cart</url></action>
            </block>

在60行去掉这个block

1
2
3
4
            <block type="core/template" name="right.permanent.callout" template="callouts/right_col.phtml">
                <action method="setImgSrc"><src>images/media/col_right_callout.jpg</src></action>
                <action method="setImgAlt" translate="alt" module="catalog"><alt>Keep your eyes open for our special Back to School items and save A LOT!</alt></action>
            </block>

Magento的模块的调动删除,都是可以在xml中实现的。

30

Magento去掉URL中的index.php

Author 紫月蓝骋    Category Magento     Tags

Magento去掉URL中的index.php貌似对seo有一定的好处,我对这个不是很了解,正在学习seo中,呵呵。进入正题,进入后台System—>Configuration,点击左上角GENERAL中的WEB,其中有一个Search Engines Optimization,保证他是yes就好。当然前提是你的服务器支持URL重写。