• Magento 常用代码笔记

    <?php

    //输出对象相关信息,类 方法  值 等

    请参考 参考上一篇文章   function objInfo() {}

    //基础信息 $mage_obj

    $mage_obj = new Mage();

    //调用后台静态块

    echo $this->getLayout()->createBlock(‘cms/block’)->setBlockId(‘block_id’)->toHtml();

    echo $mage_obj->app()->getLayout()->createBlock(‘cms/block’)->setBlockId(‘block_id’)->toHtml();

     

    //创建一个静态块

    echo $mage_obj->getBlockSingleton(‘checkout/cart_sidebar’)->setTemplate(“checkout/cart/top_bar.phtml”)->toHtml();

    echo $mage_obj->app()->getLayout()->getBlockSingleton(‘checkout/cart_sidebar’)->setTemplate(“checkout/cart/top_bar.phtml”)->toHtml();

     

    //调用后台设置信息 //通常位于system.xml配置文件中

    Mage::getStoreConfig(‘wjtheme/template/prodnav’);

    //调用后台自定义变量值

    Mage::getModel(‘core/variable’)->loadByCode(‘var_code’)->getValue();

    //getSingleton 方法

    objInfo($mage_obj->getSingleton(‘catalog/session’));

    //getData() —last_visited_category_id   last_viewed_category_id   last_viewed_product_id

     

    //helper  方法

    Mage::helper(‘catalog/product’)

    objInfo($mage_obj->helper(‘catalog/product’)->getEmailToFriendUrl($_product));

     

    //getModel 方法

    Mage::getModel(‘catalog/product’)

    objInfo($mage_obj->getModel(‘catalog/product’)->load($product_id)->getProductUrl());

     

    //registry 方法

    Mage::registry(‘current_product’)

    objInfo($mage_obj->registry(‘current_product’)->getId());

     

    待补充…
  • Magento边栏调用高级搜索功能

    Magento中将advanced search 添加到边栏

    在Magento中使用xml调用静态块相信大家不会太陌生,比如将货币调用到头部,将mini登录框调用到首页等等。

    这边简单记录一下,边栏调用高级搜索功能的过程

    首先找到高级搜索相关的xml,

    catalogsearch.xml 中
    <block type=”catalogsearch/advanced_form” name=”catalogsearch_advanced_form” template=”catalogsearch/advanced/form.phtml”/>

    将这块添加到左边栏或右边栏后,刷新页面,会发现两个问题,一是在分类查看页的时候breadcrumbs 会出现异常,二是在输入条件后点击搜索无法跳转到正确的页面。

    解决这两个问题,首先查看此块对应的代码。app/code/core/Mage/CatalogSearch/Block/Advanced/Form.php

    public function _prepareLayout()   会发现第一个函数就修改了面包屑

    public function getSearchPostUrl()  点击动作的处理页面

    我们只是基于已有的高级搜索功能,将其添加到边栏,所以就不要直接去修改源文件咯。

    于是创建一个新的模块,将这第一个函数重写,第二个可重写也可以自定义一个函数

    <?php
    
    class WJ_Theme_Block_Search extends Mage_CatalogSearch_Block_Advanced_Form {
       public function _prepareLayout()
        { 
    
        }
    
        public function getABSPostUrl()
        {
            return $this->getUrl('catalogsearch/advanced/result');
        }
    
    }

    模板布局文件中调用
    <block type=”wjtheme/search” name=”sidebar_advanced_form” template=”catalogsearch/advanced/mini.form.phtml”/>

    完成自定义的代码及样式编辑后,测试即可

    演示网址http://thememarine-1610-wj.magentoeasy.net/clocks-barometers.html

  • Magento执行SQL操作数据库

    一、使用Magento  resource 连接数据库,进行操作

    1. $db = Mage::getResourceSingleton(‘core/resource’)->getConnection(‘core_write’);
    2. $result = $db->query(‘SELECT `entity_id` FROM `catalog_product_entity`’);

    3. if(!$result) {
    4.     return FALSE;
    5. }

    6. $rows = $result->fetch(PDO::FETCH_ASSOC);

    7. if(!$rows) {
    8.     return FALSE;
    9. }

    10. print_r($rows);

    二、针对模块,采用zend 框架模式操作模块对应数据表格

    1. $resource = Mage::getSingleton(‘core/resource’);
    2. $read = $resource->getConnection(‘core_read’);
    3. $categoryProductTable=$read->getTableName(‘category/category_product’)
    4. $select = $read->select()->from(array(‘cp’=>$categoryProductTable))->where(‘cp.category_id=?’, ’3′);
    5. $products=$read->fetchAll($select);
    6. foreach($products as $row)
    7. {
    8. $product = Mage::getModel(‘catalog/product’)->load($row['product_id']);
    9. echo $product->getName();
    10. }

     

  • Magento调用mini登录框问题

    通过前面的调用边栏高级搜索的文章,回头再来看一下 Magento已有的mini login form。

    可以在customer.xml中发现一下调用代码

    <!--
    Load this update on every page when customer is logged out
    -->
    
        <customer_logged_out>
            <!---<reference name="right">
                <block type="customer/form_login" name="customer_form_mini_login" before="-" template="customer/form/mini.login.phtml"/>
            </reference>-->
            <reference name="top.links">
                <action method="addLink" translate="label title" module="customer"><label>Log In</label><url helper="customer/getLoginUrl"/><title>Log In</title><prepare/><urlParams/><position>100</position></action>
            </reference>
            <remove name="reorder"></remove>
        </customer_logged_out>

    会发现在右边栏调用的mini login form 被注释了,去除注释,进入包含右边栏的子页面之后,发现mini登录框确实被调用了,但是头部的title也变成 Customer Login了,这样可不太好。

    仿照之前调用高级搜索解决面包屑问题的方法,我们也去看一下默认的代码块

    /**
     * Customer login form block
     *
     * @category   Mage
     * @package    Mage_Customer
     * @author      Magento Core Team <core@magentocommerce.com>
     */
    class Mage_Customer_Block_Form_Login extends Mage_Core_Block_Template
    {
        private $_username = -1;
    
        protected function _prepareLayout()
        {
            $this->getLayout()->getBlock('head')->setTitle(Mage::helper('customer')->__('Customer Login'));
            return parent::_prepareLayout();
        }

    发现在调用的时候,title被重设了

    于是在我们自定义的模块中重写此方法

    <customer_logged_out>
            <reference name="right">
                <block type="wjtheme/login" name="customer_form_mini_login" before="-" template="customer/form/mini.login.phtml"/>
            </reference>

    测试成功,我们还可以在mini.login.phtml中添加需要的链接,如注册  忘记密码等

    OK 就记到这边 :-)

     

     

  • 几个开源php系统

    这几天一直想寻一个好点的轻量级开源php系统,试用了很多,但由于太菜,在选择上还是犹豫不定。
    先说说购物车系统吧
    国内的看了下ecshop,比较符合国人使用习惯,功能也基本到位了,但感觉逻辑上不够严密,后台的一些模块限制太大了。最关键的是没有自己的url路由 机制,这样就对seo很不友好了,虽说透过.htaccess文件可以做一些,但无法自动控制 始终感觉很差劲。
    国外的购物车系统就多了,一直在用的Magento 在各方面,seo、产品、后台控制、报表等等做的都相当到位,但用了这么久,始终感觉Magento使用消耗太大,而且对我这个菜鸟来说定制起来很不方便 (因为本来就对zend框架不是很熟,加之Magento是在zend的基础上有过二次封装),对服务器的要求也比较高,300+的数据表中,有一大部分 是常见用户不会动到的。 ecart 很早之前听说是一个相当轻量级的购物车系统,安装看了下,发现新的版本简直就是Magento的克隆版本,所以这边就不多说。zend-cart就不多说 了,首先还是url问题,后台功能看似强大 但逻辑结构实在太差,没法看。WordPress,drupal的购物车插件 也不太好用,一个CMS系统要化身成专业的购物车系统还得适合seo也是一件很不容易的事,需要相当一段时间的重构开发。
    系统看了不少,当然选择上还需要考虑到其所用的php框架和js库,zend框架确实强大,不过不适合菜鸟入门,从框架功能及服务器资源来看用起来都过于 浪费。 陆陆续续看过一段时间的CI框架,也有基于CI的购物车系统GoCart(关于GoCart,在我的51cto博客中有介绍),功能目前比较简单,拿到国 内用需要添加很多。由于对session操作不太清楚,加上ci的session用起来比较麻烦,一直没敢深入,但现在必须在购物车系统和cms系统上有 所推进了。
    初步打算重写下GoCart,慢慢来吧,说不定下次发现更好的也或许会换一个来看看 :)
click
©2010-2024 Jeen All Rights Reserved.Powered by emlog 京ICP备15058100号-1