为prestashop选择一个主域名

No Comments

wordpress都有这样的功能,可以选择一个主域名,比如我选择www.znjack.com,如果有人用znjack.com访问,就会自动301到www.znjack.com。

地址在这里:http://code.google.com/p/maindomin

prestashop 1.2.5测试通过。

下载并安装就可以了,不过别点那个homepage,因为还没有做好。

prestashop shipping运费相关设置

No Comments

打开shipping选项卡,初始界面上有2个区域,上面的Handling是一些全局设置,下面的是运费。先别去管运费,因为通常运费是跟区域还有重量有关的。

Handling里面,第一个Handling charges是包装费用,会附加在每个订单里面。如果你想整体提高运费,可以设置这里,但是一般包装费用都是算在运费里面,所以一般应该都是0

第二第三个是免运费的设置Free shipping starts at,Free shipping starts at多少钱或者多重就免运费,可以根据你的情况设置。

最后一个Billing要设置为According to total weight,因为这样才可以按照订单的重量来算运费,一般的运费价格都是0-30kg多少钱,后面每0.5kg多少钱,所以这里按照重量来算运费方便后面对于各个快递商的设置。

子选项卡中,Carriers是物流服务商的设置,这里的设置很简单,直接添加服务商就可以了。

logo后面的文字,会显示在客户选择服务商的时候,所以可以填你想让顾客看到的文字。

下面是默认物流商,被选择的会在客户选择的时候默认选中。

比较重要的是States,Countries和Zones这3个选项卡,这里的工作量也会比较大。

Zones的默认设置是洲,但是实际上,各个物流商都有自己的区域划分,什么1区2区的,而这些区域往往不是按照洲来划分的。比如在ems中,港澳台就是一个区域,这时候你需要在zones里面新建一个组叫“港澳台”,然后在counties中把港澳台加在这个组里面。

counties中的国家和地区比较多,可以使用filter来查找以提高速度。

counties中基本上收集里全球所有的国家和地区,不要奢望你能用到所有的地区,基本上欧洲一个区,日本一个区,美国一个区,港澳台、东南亚、南美、大洋和非洲分开就差不多了。

对于重点的国家或地区,还要设置states,因为有的快递对于美国不同州的价格是不一样的,这时候可以用states的设置来区分这种省级别的设置。

Price ranges和Weight ranges对应shipping首页的According to total price和According to total weight,0-30kg是一个组,如果你卖的东西有可能会高于30kg,要另外设置其他的组,这会是一个痛苦的过程。

现在可以返回shipping首页,进行运费设置了。

(中文的。。。)

prestashop的运费设置有点复杂,而且功能并不是很完美。虽然小型商业来说够用了,但是如果要作为大型平台使用,prestashop任然有很长的路要走。

关于转载

No Comments

我在国内做prestashop开发是从2008年初开始的,那时在国内根本找不到prestashop的资料,有几篇简介还是用google translate翻译的。那时候就是在google.com上面也找不到很多资料,prestashop才刚起步,官方的论坛只有英文和法文2种版本。

那时候做了一个对于prestashop二次开发的项目,一直想写点关于prestashop的资料,但是一直没有付诸实施,实在是太懒了。而且那时候的prestashop bug很多,后台添加商品这样基本的功能都有bug。

去年又开始关注prestashop,很欣喜的看到国内也有了对于这套系统的一些关注。我想应该是写点东西了,所以从去年9月到现在,大概写了一点东西吧。

刚才在看google analytics的时候,看到了几个关键字流量比较大,随手一搜,发现了一些有趣的东西。有一些网站转载了我的文章,但是没有注明出处。我不反对转载,因为我自己的这个网站同样是非盈利性质的,如果写点东西能帮助到更多的人,我很高兴。不过我觉得或许应该写明出处,尊重下我的劳动。以前我也转载过很多别人的文章,但是现在觉得这样不好。所以多多少少写点自己的东西。

我发现转载的代码分析的文章比较多,如果有时间,我会多写点这样的东西。

很感谢大家访问我的网站。如果某些内容对你有所帮助,我很高兴。

prestashop 1.2.5中的gsitemap的bug

No Comments

我不知道官方在1.3.x修复了这个问题没有,不过至少1.2.5是一个使用比较多的版本,所以可能会有许多人不愿意升级。

google sitemap在prestashop中的模块叫做gsitemap,在这个版本中,存在生成其他语言地址的时候会增加2次域名的问题。

比如默认语言http://znjack.com/abc这个地址是正常的,但是我还增加了第二甚至更多种语言,这时候会生成类似http://znjack.com/lang-zh/znjack.com/abc这样的地址,明显是错误的。

打开modules/gsitemap/gsitemap.php,修改86、113、147、165行,把最后的$tmplink换成str_ireplace(‘/’.$_SERVER['HTTP_HOST'].’/', ”, $tmpLink)。

无论你启用了url friendly与否,这里都会出现这样的问题,而且问题是一样的。

这里有下载
prestashop google sitemap module (220)

如何在prestashop首页添加随机商品

No Comments

首页的模块是homefeatured,法国人经常乱命名各种模块,找一个模块要找很久。

1.2以前的版本是不支持这个功能的,我很惊奇的发现1.2.5的category类里面的getProduct增加了读取随机产品的选项,所以我们不需要自己写sql语句了。

这算是1.2版本一个不小的改动吧,prestashop从07年末开始被广泛使用以来,进步还是很大的。

把homefeatured.php的69行改成这样,就支持随机商品了。

$products = $category->getProducts(intval($params['cookie']->id_lang), 1, ($nb ? $nb : 10), NULL, NULL, false, true, true, ($nb ? $nb : 10));

prestashop后台不能登陆的解决办法

5 Comments

这种情况一般发生在网站整体迁移之后。国外的空间在域名生效前一般会给你一个临时的地址,像http://99.99.99.99/~example这样的地址,如果你是用这种地址安装的prestashop,在正式应用域名后,就会出现后台不能访问的现象。

解决办法也很简单,打开config/settings.inc.php,编辑__PS_BASE_URI__后面的值,如果是独立域名,像http://example.com/,写’/'就可以了;如果后面还有文件夹,像http://example.com/folder_name/,写’/folder_name/’就可以了。

如何更改prestashop标题中的网站名顺序

1 Comment

标题属于核心内容,模板和模块均无法控制。
在classes/tools.php里面改493、505、471行
Configuration::get(‘PS_SHOP_NAME’)就是标题,把它放在后面就好了

$row['meta_title'] = $row['meta_title']. ‘ – ‘ . Configuration::get(‘PS_SHOP_NAME’);//就是这样

prestashop的插件式结构综述

1 Comment

 最近有一些朋友来问我prestashop的结构问题,我在这里大概向大家讲一下。

像joomla这样的程序,大部分操作全是由index.php代理的,就是说大部分的url都是传值到这个页面里面,再由这个页面按照不同的路由组织方式进行分发,调用不同的控制器和功能。所以这里程序,基本都是全面向对象的开发。

程序使用面向对象的开发,代码简洁明了、适合团队合作开发,并且很适合制作这种插件式的结果,很方便扩展更多的功能。但是prestashop并不是全面向对象的,在第一级的访问,是面向过程的开发,然后再调用各种类来完成各种任务。

那么这样有什么好处呢,大家知道php是用解析器来解析的脚本语言,并且每次访问都会进行解析和执行,并不编译。这样每次的初始化就会有很大的负担(好处是绝对没有垃圾),尽管php的解析器性能非常优良,但是大量的对象依然会减慢执行的速度。所以有一些人认为php应该总是面向过程的。

比如我访问一个产品信息,访问的地址会是product.php?id_product=1,这样,只需要初始化与产品相关的各种模块就可以了,因为这样的访问方式,至少就减少了处理url路由再dispatch(分发)的时间。

以product.php举例,一个完整的执行过程如下

  1. config.inc.php初始化各种常量
  2. init.php初始化各种设置
  3. 定义了几个只用在该页面的方法
  4. 要载入的css和js,这样就可以精确的控制流量,增强用户体验
  5. 初始化头部,每个页面的头部都是一样的
  6. 调用product类来读取产品信息
  7. 处理各种产品信息,包括图片、价格、当前分类下的其他产品等
  8. 从数据库中读取hook在这个页面的插件,执行
  9. 所有的结果assign在smarty里面,输出
  10. 初始化脚部,和头部一样

这样,产品详细页面就执行完了,数据库的读取(包括对应语言和货币)和验证等这样的大量代码,被包含在类中进行维护;输出控制和计算,是外部的面向过程来进行精确的计算,因为这些都是只针对产品信息的,所以修改等操作是不会对其他页面造成影响的。这样集成了2方面最大的优势,发挥出php这种既可以面向对象又可以面向过程的语言的真正实力。

prestashop 免费模板下载

No Comments

prestashop 免费模板下载

black and white simplicity简单的黑白

black-diamond黑钻石

creation-shop-theme创意模板

orange-boutique橘色

theme informatica

ultimate-webshop

prestashop代码分析之config.inc.php

No Comments

第一步先打开index.php,可以看到引入了3个文件:config/config.inc.php,header.php,footer.php。
最重要的就是config/config.inc.php了,打开看看。

@ini_set('display_errors', 'off');
@ini_set('upload_max_filesize', '100M');
@ini_set('default_charset', 'utf-8');

//这些部分修改了php.ini里的一些默认设置

header('Content-Type: text/html; charset=utf-8'); //强调是utf8的编码
function __autoload($className)
{
    if (!class_exists($className, false))
         require_once(dirname(__FILE__).'/../classes/'.$className.'.php');
}

//很神奇的自动载入函数,不知道的童鞋看看手册,其实很简单

if (!file_exists(dirname(__FILE__).'/settings.inc.php'))
{
	$dir = ((is_dir($_SERVER['REQUEST_URI']) OR substr($_SERVER['REQUEST_URI'], -1) == '/') ? $_SERVER['REQUEST_URI'] : dirname($_SERVER['REQUEST_URI']).'/');
	if(!file_exists(dirname(__FILE__).'/../install'))
		die('Error: \'install\' directory is missing');
	Tools::redirect('install', $dir);
}
include(dirname(__FILE__).'/settings.inc.php');

//如果没有settings.inc.php,就开始安装进程

if (!isset($_SERVER['REQUEST_URI']) OR empty($_SERVER['REQUEST_URI']))
{
	$_SERVER['REQUEST_URI'] = $_SERVER['SCRIPT_NAME'];
	if (isset($_SERVER['QUERY_STRING']) AND !empty($_SERVER['QUERY_STRING']))
		$_SERVER['REQUEST_URI'] .= '?'.$_SERVER['QUERY_STRING'];
}

//有些web服务器会没有这个REQUEST_URI,所以要处理一下

$currentDir = dirname(__FILE__);//这个目录,是config目录,因为__FILE__是当前文件

这下面就是定义常量的了。有些童鞋要问了,为什么不定义成变量呢?一是这些内容不需要改动,二是在smarty中,可以使用$smarty.const.xxx来直接调用常量。

Configuration::loadConfiguration();//prestashop把所有的配置都存在一个表里面
Language::loadLanguages();//载入语言
Tax::loadTaxZones();//税,国内就很少有这样的设置
$defaultCountry = new Country(intval(Configuration::get('PS_COUNTRY_DEFAULT')));//读取地区id,设置
$timezone = Tools::getTimezones(Configuration::get('PS_TIMEZONE'));//设定时区
if (function_exists('date_default_timezone_set'))
	date_default_timezone_set($timezone);//如果是php5,有date_default_timezone_set函数,则设定时区

Older Entries Newer Entries