Posted on 21-07-2009
Filed Under (技术) by waterlin

WOZ模块给Zen-cart提供了集成WordPress作为其博客系统的机会,不过,如果你用的是WordPress2.7版本,集成完毕后访问首页(http://your.zen-cart.com/index.php?main_page=wordpress),可能会出现类似下面的错误:

Warning: Cannot modify header information – headers already sent by (output started at E:\xampp\htdocs\zen-cart-with-wordpress\includes\templates\template_default\common\html_header.php:22) in E:\xampp\htdocs\zen-cart-with-wordpress\wordpress2.7.1\wp-includes\pluggable.php on line 850

而WordPress2.5版本则不会有类似的问题。

要解决这个问题很容易,只要把WordPress网址转发功能给屏蔽掉就好了。在WordPress主题的functions.php文件里加上这么一行代码就好了:

remove_filter(‘template_redirect’,’redirect_canonical’);

如果你用的是WOZ,则在default主题的functions.php文件里加入这段代码即可。有关这个问题的详细解释,以及WordPress转发网址的理由,可以查看Velvet Blues的这篇文章

(0) Comments    Read More   
Posted on 20-07-2009
Filed Under (技术) by waterlin

Zen-cart代码里都是用TABLE_ADDRESS_BOOK这类的define定义来代表实际的数据库表名称。这样做,是因为不同的Zen-cart安装会有不同的前缀,唯有这样才能正确识别出表名。

在对Zen-cart进行二次开发的时候,可以在/includes/database_tables.php里查找各数据库表的define定义。

(0) Comments    Read More   
Posted on 20-07-2009
Filed Under (技术) by waterlin

虽然Zen-cart左右栏都有相关的module放在sideboxes里,但是,有的时候,需要在页面上某个地方单独显示这些box的内容。比如说,我想把Shopping Cart和Currencies的内容显示在页面的头部。这个时候,并不能直接用Zen-cart提供的module;唯有对现有的module进行相关的改造,才能自如的显示内容。

Zen-cart 1.3.8 采用的模板技术比较特殊,/includes/modules里存放的是相关的module文件,负责页面数据的生成;而模板文件则是放在各个模板目录,处理相关页面内容的生成。整个过程更像是对zen-cart的hack,而不是module的制作。

下面就以创建一个页面头部的currencies,来简单说明一下页面module的制作方法,制作完成后的效果如下图所示:

zen-cart_module_make.png

可以参考、对比

/includes/templates/template_default/sideboxes/tpl_search_header.php
/includes/templates/template_default/sideboxes/tpl_search.php

/includes/modules/sideboxes/search_header.php
/includes/modules/sideboxes/search.php

来获得灵感。

按以下三个步骤来制作这个module:

1)
在/includes/modules/sideboxes目录下,新建一个名叫currencies_header.php的文件。

如果需要,在这个文件里可以依照/includes/modules/sideboxes/search_header.php提供的方法来直接操作数据库。

在这里,我们根据/includes/modules/sideboxes/currencies.php来创建文件,主要是把currencies.php里用于sidebox显示的句子删掉:

$title = '<label>' . BOX_HEADING_CURRENCIES . '</label>';
$title_link = false;
require($template->get_template_dir($column_box_default, DIR_WS_TEMPLATE, $current_page_base,'common') . '/' . $column_box_default);

这样,我们就不会在调用这个module的时候,调用到用于sidebox里显示的相关语句。

同样,在这个文件里,我们可以根据自己的需要,加入一个module生成数据所需要的所有元素。

2)
新建一个名叫tpl_currencies_header.php的文件到/includes/templates/YourTemplate/sideboxes,为这个module创建单独的显示风格。这里根据你需要放置的地方,对其中的CSS/XHTML代码进行修改即可。用于显示的数据,是从第一步的module里传进来的全局变量。

注意:Zen-cart 1.3.8 里,按习惯用$content来存储生成的页面显示代码。

3) 在/includes/templates/YourTemplate/common文件夹里,到指定的页面模板里,加入相关的显示生成语句。

在这个例子中,因为是要在页首显示这个currencies显示框,则要在tpl_header.php里加入这么一段话就可以调用module生成数据了:

<?php
require(DIR_WS_MODULES . 'sideboxes/currencies_header.php');
echo $content;
?>

用上面的方法,就不单单可以修改现有的module,还能根据自己的需要,创作更多的module出来。

(0) Comments    Read More   
Posted on 08-05-2009
Filed Under (技术) by waterlin

一个朋友用Zen-cart的代码搭了一个网站娱乐一下,是从Zen-cart中文站下的代码。他的网站前几天出了这个问题:访问首页,只能打开一个空白页面,啥都没有;后台管理页面能访问,没有任何问题。

打开网站的日志(你也可以打开页面的错误输出来显示这个错误),能看到提示如下的错误信息:

Warning: session_start() [function.session-start]: Cannot send session cache limiter – headers already sent (output started at /home1/ecshinec/public_html/index.php:5) in /home1/ecshinec/public_html/includes/functions/sessions.php on line 108

Notice: Undefined index: seo_urls in /home1/ecshinec/public_html/includes/functions/html_output.php on line 24

Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 31457280 bytes) in /home1/ecshinec/public_html/includes/classes/seo.url.php(1068) : eval()’d code on line 21846

Notice: Object of class queryFactoryResult could not be converted to int in Unknown on line 0

这个Fatel Error很有可能是Ultimate SEO URLs这个module出了问题。

解决的办法,就是在后台管理 –> Configuration –> SEO里,把SEO相关的属性全部都改成false。当然,更深层次的错误原因,有空的时候再进一步研究。

(2) Comments    Read More   
Posted on 04-03-2009
Filed Under (技术) by waterlin

以前一直以为要在模板文件里才能修改页首和页脚的导航信息,今天才发现其实Zen-cart的后台就有直接编辑、选择这些导航信息的功能。

选择与设置导航信息条内容:

后台管理 –> Tools –> EZ-pages

在这里,可以新建页面链接,修改是否在页首、页尾导航条出现等信息。你可以用如下的例子来新建:

    home:
Open New Window:Off
Page is SSL:Off
Header:On
Sidebox:Off
Footer:On
Chapter:0
TOC:0
Internal Link URL: index.php?main_page=index

specials:
Open New Window:Off
Page is SSL:Off
Header:On
Sidebox:Off
Footer:On
Chapter:0
TOC:0
Internal Link URL: index.php?main_page=specials
new products:
Open New Window:Off
Page is SSL:Off
Header:On
Sidebox:Off
Footer:On
Chapter:0
TOC:0
Internal Link URL: index.php?main_page=products_new
all products:
Open New Window:Off
Page is SSL:Off
Header:On
Sidebox:Off
Footer:On
Chapter:0
TOC:0
Internal Link URL: index.php?main_page=products_all
reviews:
Open New Window:Off
Page is SSL:Off
Header:On
Sidebox:Off
Footer:On
Chapter:0
TOC:0
Internal Link URL: index.php?main_page=reviews
contact us:
Open New Window:Off
Page is SSL:Off
Header:On
Sidebox:Off
Footer:On
Chapter:0
TOC:0
Internal Link URL: index.php?main_page=contact_us
faq:
Open New Window:Off
Page is SSL:Off
Header:On
Sidebox:Off
Footer:On
Chapter:0
TOC:0
HTML Content: FQA contents.

当然,你要注意的是,Header和Footer字段里的Order属性一定要填上1、2、3、4、5这样的数字;否则填数字0的话,Zen-cart不会显示导航条。

如果你按上面的例子输入了这些参数,就可以得到如下所示的导航条了:


而有关页头和页脚的参数、属性设置则在后台管理 –> Configuration –> EZ-Pages Settings里。

在这里,你可以设置打开或是关闭EZ-pages中的header、Footer的显示属性。

现在管理起页首和页脚的导航条,就方便多了,不用折腾源文件了。

另外,默认的页首导航条上,一般会有一些目录的tab,列举了一些目录的名称,提供了一个目录的快速进入方法。如果要去掉这些烦人的tab的话,可以把下面的属性设为关闭状态即可:

后台管理 –> Configuration –> Layout Settings –> Categories-Tabs Menu ON/OFF

(0) Comments    Read More   
Posted on 24-07-2008
Filed Under (软件) by waterlin

如果你在Zen-cart里需要建立一些到各个页面的链接(最常用的例子就是导航条了),那你就需要读一读本文了。

Zen-cart里,要添加这种链接很简单,打开你放置链接的模板页面,比如说,如果你想在页眉添加像这样的导航条:

LogIn | Register | Contact US | New product | Home

你只需要在/includes/templates/Your_template/common/tpl_header.php文件中用如下的形式来自动生成链接。

<div id=”navMain”>
<ul>
<li class=”title_back”><a href=”<?php echo zen_href_link(FILENAME_PRODUCTS_NEW, ”, ‘SSL’); ?>”>New Product</a></li>
<li class=”title_back”><a href=”<?php echo zen_href_link(FILENAME_CONTACT_US, ”, ‘SSL’); ?>”>Contact us</a></li>
<li class=”title_back”><a href=”<?php echo zen_href_link(FILENAME_ACCOUNT, ”, ‘SSL’); ?>”>Register</a></li>
</ul>
</div>

其中zen_hred_link这个函数就是专门用来生成链接地址的,后面跟着的像FILENAME_ACCOUNTFILENAME_CONTACT_US这样的变量,则到/includes/filenames.php里去找吧。

define(‘FILENAME_ACCOUNT’, ‘account’);
define(‘FILENAME_CONTACT_US’, ‘contact_us’);

这样,很容易就生成了你所需要导航条链接。

(1) Comment    Read More   
Posted on 23-07-2008
Filed Under (技术) by waterlin

如果要修改Zen-cart产品显示图片的大小,可以通过Admin->Configure->Image来修改显示图片的参数,而参数的变量名则表示了该变量所起的作用,很好理解。下面就简单介绍一下main页面常用的几个变量的含义:

1) 如果需要修改Monthly Specials的图片大小,则调整这两个参数即可:

Small Image Width
Small Image Height

2) 如果需要调整Product Info页面里的图片,则调整这两个参数即可:

Product Info – Image Width
Product Info – Image Height

3) 如果需要调整Product New Listing的图片大小 ,则调整这两个参数即可:

Image – New Products Width
Image – New Products Height

其他参数的意思很好理解,反正多试一试就知道了。

当你把Calculate Image Size选为True的时候,Zen-cart会根据它的算法来调整图片的大小 ,否则严格地按照你所规定的Width和Height来显示图片。

Zen-cart调整图片的算法:

通过这些变量设置的值,均是放大或缩小图片后显示的最大值,Zen-cart会根据你的图片实际比例来调整好显示效果的,所以,你不用担心你的图片会变形。Zen-cart按你给定的长宽值,等比例缩放要显示图片的长和宽,Zen-cart会选Width、Height最先达到预设值的比例,来决定整个图片的缩放比例。总之,zen-cart就是以不超过你的预设值为原则来缩放图片的。

(0) Comments    Read More   
Posted on 17-07-2008
Filed Under (技术) by waterlin

昨天帮朋友从另一个朋友的Zen-cart数据库里导入同样的产品信息,包括相同的图片、相同的文字描述等,但是其他信息都不要了。所以肯定不能把数据库一股脑地导入过来,看来只能有选择的导入一些特定的表了。

仔细地看了一下Zen-cart的数据库,其实整个过程很简单,分两步进行就可以了。

第一步,只需要将以下几个表里的数据导入到新的数据库

  1. categories
  2. categories_description
  3. Product_types
  4. product_types_to_category
  5. products
  6. products_description
  7. products_options_values_to_products_options
  8. products_to_categories

第二步,再把图片复制到新服务器上相同的路径下。

通过这两步,就在新的服务器上建立了一个产品信息相同的新站点。

(0) Comments    Read More   
Posted on 17-07-2008
Filed Under (技术) by waterlin

这几天抽时间帮一个朋友设计了一个Zen-cart的模板,基本上完工了,属于比较简洁硬朗的风格。

(4) Comments    Read More