Posts Tagged ‘ Magento

magento – 计划任务(cron job)在magento中的作用和使用教程

计划任务(cron job)是Magento系统中一个很有用甚至可以说必须使用的功能,而最近在网上跟人聊天发现很多Magento的使用者不知道这个功能或者知道却认为可有可无,我在这里建议各位Magento的使用者,把这个功能使用起来吧。

在之前关于Newsletter的那篇博文我有讲到,要使新闻能按设定的时间自动发送,就必须设置好计划任务(cron job)。计划任务(cron job)简单的来说就是在系统中每隔一段时间来重复操作一件事,比如每隔多少时间清理日志,比如每天提交Sitemap给google等等。
阅读全文

Magento PDF发票,支持中文,以及修改的办法

今天给大家讲一下我遇到的问题,顺便说下如果让magento的PDF发票支持中文.
Magento生成PDF发票.使用的是zend framework的zend_pdf类.
下面是一个简单的,使用zend framework生成pdf文件的用法.

< ?php
...
// 创建一个新的PDF文档.
$pdf1 = new Zend_Pdf();
 
// 加载一个现有的PDF文件.
$pdf2 = Zend_Pdf::load($fileName);
 
// 从字符串加载并生成PDF文件.
$pdf3 = Zend_Pdf::parse($pdfString);

okay..非常简单吧..
我们先来看如果让magento的PDF支持中文.
首先,我们要明白.Magento为什么不支持中文.. 其实zendcart还有joomla都存在这个问题.
是因为这些程序中,使用的文字库并不支持中文.so,我们只需要替换掉就可以了.
阅读全文

Magento中我的账户访问权限判断

Magento前台用户访问的权限验证有点搞,呵呵,在ZF中我们一般的写法是用ACL,但是Magento的写法有点搞,是直接写在控制器Mage_Customer_AccountController中的,详细请见preDispatch方法。
阅读全文

关于Magento的时间/时区问题

今天同事研究为啥保存的时间不是东八区时间,由此引来的话题。

Magento整个系统中使用UTC时间,即通用协调时(UTC, Universal Time Coordinated)。这样保证在不同的视图或者Store里使用的时间与本地时间一致,在系统配置中可以看到,每个视图或者店铺可以单独设置时区。

Magento在数据库中存贮的都是UTC时间,在渲染视图的时候会显示当前时间。 阅读全文

深入理解Magento-第十章-数据操作&数据收集器

在我们开始介绍数据操作前,我们先介绍一个神兵利器—Varien Data Collections。在最早的时候我们写php通常用Array来做数据收集器,这个小东西可发挥了大作用,要知道如果你想在其他语言中实现Array有多么难过。
例如c、c++。

在php5中,更是发扬了Array,php内置了一些类和接口,允许你创建你自己的数据结构。Magento充分利用了这一点,在使用Varien_Data_Collection来做数据收集的时候,它实现了php内置IteratorAggregate对象迭代器和Countable两个接口。下面是用php内置类ArrayObject的一个例子。

$array = new ArrayObject();
class MyCollection extends ArrayObject{}
$collection = new MyCollection();
$collection[] = 'bar';

在接下来的文章中,我认为你已经了解ArrayObject、IteratorAggregate、Countable。如果还是很陌生,我建议你先阅读这篇文章PHP5对象迭代(Object Iteration)。当然你不必了解很底层的东西,你只需要知道如何用就可以了。

适合对象:高级开发者

作者:精东

最后修改时间:2010年5月31日

版本:V 0.1.0

阅读全文

深入理解Magento-第九章-修改、扩展、重写Magento代码

作为一个开发者的你,肯定要修改Magento代码去适应你的业务需求,但是在很多时候我们不希望修改Magento的核心代码,这里有很多原因,例如将来还希望升级Magento、还想使用更多的Magento代码。如果你正在寻找修改Magento代码的最佳方式,那么此篇文章将会是一个不错的教程。

适合对象:高级开发者

适合目标:开发者希望自定义修改Magento

当前版本:Magento versions: 1.4.0.1

作者:精东

最后修改时间:2010年7月13日

版本:V 0.3.0

重写Magento模块(Module)

第一步,你需要创建属于你自己代码的命名空间,例如Wemvc,App等,为了方便与大家分享代码,我将空间命名为App。

app/
     code/
            core/
            community/
            local/
                    App/

假如你现在打算修改Mage/Catalog/Block/Breadcrumbs.php这个文件,你可以在你的命名空间,App里添加一个新的模块“Catalog”。接下来创建块(Block)目录,并复制Breadcrumbs.php到你的新目录中。这里还需要你创建一个config.xml配置文件。 阅读全文

Magento如何使用和设置Cookie&Session

给大家介绍两个Magento的核心对象-Mage_Core_Model_Cookie & Mage_Core_Model_Session
首先介绍Mage_Core_Model_Cookie,这个对象主要是用来设置Cookie的,里面主要下列方法:

public function getDomain();
public function getConfigDomain();
public function getPath();
public function getLifetime();
public function setLifetime();
public function getHttponly();
public function isSecure();
public function set();
public function renew();
public function get();
public function delete();

使用起来非常方便,例如设置一个Cookie:

$cookieModel = Mage::getModel('core/cookie');
$cookieModel->set($name, $value, $period, $path, $domain, $secure, $httponly)

接下来看Mage_Core_Model_Session,这个对象的使用很简单,Session的设置如下:

Mage::getSingleton(‘core/session’)->setXXXX(value);

注意看到是getSingleton,非getModel,两者间的区别从词义可以理解,Session是单实例对象。

通过命令行来添加Magento插件或升级Magento

大家都熟悉的Magento Connect提供了大量的插件给使用者,还有方便快捷地升级您的Magento,如果您熟悉命令行,其实安装Magento插件只需要一个插件的KEY即可。
像我这个是在升级Magento的核心包,使用了一个默认的KEY:

./pear install magento-core/Mage_All_Latest

很简单吧?呵呵,Magento是我见过最佳的开源软件。

清除Magento缓存的几种方法

Magento后台叫“刷新”缓存,实际在程序执行上是清除缓存(Cleaning Cache)。

如果你想在后台刷新缓存,很简单,去后台“System > Cache Management”,点击清除全部缓存,或者在列表中选择一项你想清除的缓存。在这里我主要讲的不是后台清除,而是命令行和程序的直接清除。

如果你想通过命令行清除缓存,你需要使用ssh链接你的服务器,打如下命令:

cd /where/your/mangento/root/var/cache
rm -rf *

如果你需要在你的程序中清除缓存,一般是在计划任务中或者其他任何地方需要用这个,请将下列代码加到你的程序中,很简单。

Mage::app()->cleanCache();

也可以这样写:

Mage::app()->getCache()->clean();

如果你的计划任务脚本不在Magento程序内部,是个外部的执行脚本,那么你可以这样写:

$magento_bootstrap= '/[YOUR MAGENTO PATH]/app/Mage.php';
require_once $magento_bootstrap;
umask(0);
Mage::run();
Mage::app()->cleanCache();

多说句,呵呵,Magento里的Mage类是个启动器类,在ZendFramwork中称作Bootstrap,是通向Magento的大门。祝你使用Magento愉快~

Magento简单的EAV数据查询

因为Magento使用了EAV数据模型,所以你几乎不能够使用原始的SQL进行查询数据对象集(Collection),这里提供一个简单的方法去查询你想要的数据。

$products = Mage::getModel('catalog/product')->getCollection();
$products->addAttributeToFilter('sku', '8888');
$products->addAttributeToSelect('*');
$products->load();
foreach ($products as $_product) {
    print_r($_product->getData());
}

希望这段代码可以帮助你,这里还有一个关于addAttributeToFilter方法的介绍。

http://docs.magentocommerce.com/Varien/Varien_Data/Varien_Data_Collection_Db.html#_getConditionSql

再写段查询单条数据的代码,下面是个获取用户地址的方法:

 
customer_address_save_before_listener ($event)
{
  $address = $event->getCustomerAddress();
 
  $database_address = Mage::getModel('customer/address')->load($address->getId());
}