prestashop 1.4 使用注意事项

No Comments

top这个区块里面会有非常多的模块,基本上常见的模块都在里面了,不要删除,否则那块就没有css了。

产品的rss,还是用feedburner绑定下吧,url太长了。这是seo方面的优化。需要在header.tpl手动加一行feedburner的订阅地址,同时uninstall产品的rss,uninstall后feedburner还是可以使用的。

语言。安装好以后管理员和系统语言都是法文,不知道我是不是选错了,如果有相同情况需要在Back Office >> Tools >> Languages中修改系统默认语言,在Back Office >> Employees中修改管理员界面的语言。

因为prestashop 1.4版本会记录主域名,所以迁移过后要在数据库里改一下域名,

UPDATE `nikeshoesoutlet`.`ps_configuration` SET `value` = 'www.yourdominname.com' WHERE `ps_configuration`.`name` = 'PS_SHOP_DOMAIN' LIMIT 1 ;

prestashop 1.4的各个页面的rewrite路径都可以在Back Office >> Preferences >> SEO & URLs配置,但是首页index不能配置,因为如果你不填rewrite地址保存不了,如果填了首页的地址又会变。所以在改完首页标题等信息后去数据库里手动改下地址吧。

UPDATE `ps_meta_lang` SET `url_rewrite` = '' WHERE `ps_meta_lang`.`id_meta` =4 AND `ps_meta_lang`.`id_lang` =1 LIMIT 1 ;

id_lang是语言,按照实际情况来改。

待续。。。

prestashop 1.4代码解析:弱水三千的那一瓢

No Comments

任凭弱水三千,我只取一瓢饮。

代码就不止三千了,但是在prestashop 1.4中最重要的那一瓢,就是FrontController.php。

解析

先来看看prestashop 1.4的文件加载方式,如果你new了一个类,代码首先会在controller中寻找同名的类文件,这点和之前的版本差不多。如果找不到,就去override这个用户可以自定义类的文件夹去寻找,如果还是找不到,会用exec新建一个请求名称的类文件,然后加载classes下面的类名+core类。所以说,真正的FrontController.php,你需要在classes下面寻找到,而且类的名称也是FrontControllerCore。

如果说之前最重要的就是init.php,在prestashop 1.4中的FrontController.php,接管了init的全部工作,并且还替代了之前header.php,index.php和footer.php的全部工作,甚至包括了分页和商品排序。简而言之,FrontController.php有点像zend framework的dispatch,是开始全部工作的一个信号。

	public function run()
	{
		$this->init();
		$this->preProcess();
		$this->setMedia();
		$this->displayHeader();
		$this->process();
		$this->displayContent();
		$this->displayFooter();
	}

如此像zend的风格,我怀疑prestashop换cto了。

		if ($this->ssl AND !(isset($_SERVER['HTTPS']) AND strtolower($_SERVER['HTTPS']) == 'on') AND Configuration::get('PS_SSL_ENABLED'))
		{
			header('HTTP/1.1 301 Moved Permanently');
			header('Location: '.Tools::getShopDomainSsl(true).$_SERVER['REQUEST_URI']);
			exit();
		}

function init中的自动301,这就是prestashop 1.4新增的功能,我写的那个模块maindomin算是废了。

$page_name = (preg_match('/^[0-9]/', $page_name)) ? 'page_'.$page_name : $page_name;

function init中的$page_name变量,很方便的实现了不同页面不同模板的一个判断。要知道以前的版本里面我还是直接在header.tpl中做判断的。

		Tools::addCSS(_THEME_CSS_DIR_.'global.css', 'all');
		Tools::addJS(array(_PS_JS_DIR_.'tools.js', _PS_JS_DIR_.'jquery/jquery-1.4.4.min.js', _PS_JS_DIR_.'jquery/jquery.easing.1.3.js'));

function setMedia中的,这样的好处是统一管理了css和js,就可以做prestashop的“CCC”了。Combine, Compress and Cache
function productSort和pagination,接管了以前的sort和pagination的工作。
其他没有太大变化,主要的功能还是复制了过去的init.php。甚至变量的命名都还是全局变量,而不是面向对象中该有全局类。

定制

在override/classes文件夹下大家可以发现一个_FrontController.php,这其实就是一个定制FrontController.php的例子,把”_”删掉再访问页面,就可以看到debug信息了。要注意的是,同文件夹下还有mysql和module2个文件,如果仅改了FrontController.php,会造成因为报错不能运行下去的问题。需要将_FrontController.php的148行

error_reporting(E_ALL | E_STRICT);

改成

error_reporting(7);

这个7的意思,如果有不明白的,可以看下手册学习。
要定制FrontController.php,还是在override/classes文件夹下新建一个文件命名为FrontController.php,然后写一个类extends FrontControllerCore就可以了,方法可以覆盖core中的方法。
一个例子:

class FrontController extends FrontControllerCore
{
	function setMedia()
	{
		parent::setMedia();
		Tools::addCSS(_THEME_CSS_DIR_.'addition.css');
	}
 
	public function displayFooter()
	{
		global $cookie, $smarty;
		if (!self::$initialized)
			$this->init();
 
		self::$smarty->assign(array(
			'HOOK_RIGHT_COLUMN' => (($smarty->get_template_vars('page_name') == 'category') ? '' : Module::hookExec('rightColumn', array('cart' => self::$cart))),
			'HOOK_FOOTER' => Module::hookExec('footer'),
			'content_only' => (int)(Tools::getValue('content_only'))));
		self::$smarty->display(_PS_THEME_DIR_.'footer.tpl');
		//live edit
		if ($cookie->live_edit AND $ad = Tools::getValue('ad'))
		{
			self::$smarty->assign(array('ad' => $ad, 'live_edit' => true));
			self::$smarty->display(_PS_ALL_THEMES_DIR_.'live_edit.tpl');
		}
		else
			Tools::displayError();
	}
}

这个例子中,重写了setMedia和displayFooter方法。
重写setMedia的时候,执行了原始FrontController的这个方法,并且在css中加载了一个新的css。
重写displayFooter的时候,是复制原始的代码过来,唯一的改动就是加了一个判断,如果pagename是category,就不输出右边的column。这是为了让category list的空间更大。

prestashop 1.4升级指南

No Comments

因为1.4功能的强大,所以有很多做b2c的人都希望升级到1.4版本。其实prestashop 1.2以上的升级已经做的足够好,跟着步骤走就可以。但是1.4版本的文件有了很多的改变,所以我觉得有必要写个说明来指导大家升级到1.4版本。

1.备份你的数据库,希望你的数据库是1.1-1.3版本,因为升级程序不支持比1.1更低的版本。另外我觉得几乎没有人使用1以下的版本,bug多到无法让客户正常的支付。

2.在本地完成升级后再迁移到服务器上,所以在本地创建好你的数据库。

3.安装一个全新的prestashop 1.4,然后把旧的网站的settings.php复制过来,把数据库的连接信息都改好。

4.打开本地的prestashop 1.4,安装里面已经有了升级的选项,按照步骤来做。

5.检查数据库是否升级完成,我试了3次才升级成功。。。

6.在本地测试你的旧版本模板和模块,因为prestashop 1.4升级较多,不像1.2升级1.3那么简单了,smarty都升级到3版本了,jquery也是1.4的了。

在这里说一点,如果你的旧模板使用了比较多的smarty语言,要尽快升级到smarty v3的环境,prestashop 1.4支持smarty 2和3,但是prestashop 1.5只支持v3了,长痛不如短痛。

另外模块基本不需要改写,是可以支持的。目前还没有发现不支持的旧模块。

7.上传你的新版本,最好新建立一个数据库和文件夹来测试,测试成功之后再进行文件转移。

8.除了我在之前的博文里面提到过的settings.php中的路径设置问题,prestashop 1.4有了主域名的功能,是记录在数据库中的,所有非主域名的访问都将被301定向到主域名中,所以你在本地安装的prestashop 1.4可能会包括了localhost这样的域名信息,在Back Office >> Preferences >> SEO中设置。

9.别忘了把img文件夹中的图片复制到新网站上面去。

prestashop 1.4:新世界,新希望

No Comments

prestashop 1.4版本在上周五发布了,使用了下功能,总结出来就是一句话:prestashop真正开始和其他成熟的购物系统并驾齐驱了。

新增加的单步支付和免注册支付,一直是定制开发中最常见的。我自己也有过很多需要这方面功能的客户。还有在左侧的分类产品筛选功能,都是做电子商务提高用户体验的一些基础功能。

还记得之前版本的速度问题吗?js和css都写的比较混乱,在美国的服务器上打开prestashop的页面都需要很久,因为静态资源实在太多,想优化都无从下手。js和css引用的到处都是,每个模块都可以引入css和js在自己的tpl内,对于速度的优化是相当不利的。1.4版本一举解决了这个问题,首先从代码上统一了js和css的管理,管理了之后就可以最小化、压缩等工作,要方便多,http请求也减少了很多。1.4的模板把css都写成单独的文件,不再是一个global就打遍天下无敌了。

cms一直是prestashop的弱势,1.4版本的prestashop有了cms分类管理的能力,省力了很多。虽然还比不上prestashop+wordpress集成那么牛逼,但是对比以前是一个改进。

webservices,对于普通用户来说,可能没有太多的实用价值。可是假如你要做站群,这可是太方便的东西。我一直认为prestashop是非常适合做站群的,因为迁移和复制太方便了,运行速度也比其他的老牌购物系统好了很多。最近在做sem,考虑的事情就偏向了sem一些。

模块现在是按照官方的方式来管理的,不像以前只要随便写一个分类他会自动在模板里面创建一个分类,没有按照官方要求写的模块现在统一命名为other modules。

代码方面,新加了2个文件夹值得注意:controllers和override。从前,主要的控制代码都在写在根目录下的文件里面的,现在这部分文件都已经转移到controllers里面。对于更加面向对象化的prestashop,自然也必须留有可以让程序员发挥定制的空间,override就是这样的用途,在其下创建和controllers中文件名一样的文件,系统会自动调用override中的文件。

最后的一点是prestashop的发展方向。1.2版本之前,prestashop里面都是没有太多关于官方的东西的,在后台中只有最下面有个链接。现在prestashop的官方建立了addons.prestashop.com,有点苹果app store的意思,1.4版本和prestashop的结合尤其的紧密。在modules的子菜单中,专门有一项是My Account,就是可以直接登陆官方论坛和addons平台的帐号。

新模块:历史订单

No Comments

有一个新模块,可以显示类似于国内常见的“xx地区手机尾号为xx的x女士买了xx”这样的信息在你的prestashop上面。

项目地址:http://code.google.com/p/recentorders/

显示出来的效果:

设置:

这个模块有3个选项:自动,假数据,混合

自动就是显示系统真实的订单信息。

假数据可以在下面添加一些信息。

混合显示的列表里面,先出现的是假数据,后面是真实的数据。

自动展开的prestashop左侧主分类

1 Comment

prestashop左侧主分类一般会显示3级,默认情况下,分类前面都有一个加号,点击加号可以展开下级分类。

但是过多的点击对于用户体验并不好,所以有必要让它在开始的时候就自动展开,如果用户需要,可以点击折叠起来。

<script type="text/javascript">
$(function (){
toggleBranch($('ul.tree span.grower'));
});
</script>

这些代码可以加在模板的header.tpl里面,你也可以加

toggleBranch($('ul.tree span.grower'));

到模板目录的js/tools/treeManagement.js的最后面,让它变成

$('ul.tree.dhtml').removeClass('dhtml');
toggleBranch($('ul.tree span.grower'));
}});

prestashop随机产品模块

No Comments

http://code.google.com/p/specialfeaturedproducts/ 开源免费的prestashop随机产品模块,从官方的feathered product模块修改而来。

可以换上面的名字,可以随机显示产品、定义产品数量,还可以切换是显示feathered products还是new products,feathered products就是产品有home分类的(不一定是主分类),new products就是新上的了。

新一季的prestashop模板

No Comments

我自己做的模板都是客户定制的,我给客户承诺的是不会将其交给第三方,所以抱歉我不能放我自己做的模板出来。

这些也是我找的,给大家学习用

atch (378) 干净简单 (371) 地球 (327) 元素 (328) 非洲狐 (321) iNove(prestashop+wordpress) (332) ipnotik (322) isant (334) 月亮 (310) 大写 (320)

给prestashop用户注册添加验证电话的功能

No Comments

elseif(!Tools::getValue(‘phone’) || !Tools::getValue(‘phone_mobile’))
$errors[] = Tools::displayError(‘Error phone number’);

加在authentication.php 54行的后面

为prestashop选择一个主域名

No Comments

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

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

prestashop 1.2.5测试通过。

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

Older Entries Newer Entries