• Magento分类查看页显示同级分类

    catalog_category_default  当分类没有开启属性筛选,进入到底层分类的时候,左边就没有导航了

    很多情况下,尤其是子分类比较多时,需要在底层分类的左栏显示它的同级分类

    今天整理模板的时候,把以前的代码稍微整理了一下,比之前的解决方法要简洁一些,暂记备忘如下:

    修改 template/catalog/navigation/left.phtml 文件,参考如下代码

    …..

    <?php $_count = is_array($_categories)?count($_categories):$_categories->count();

    ///code added
    if(!$_count) {
    if($this->getCurrentCategory()->getParentCategory()->getId() != Mage::app()->getStore()->getRootCategoryId())
    $_categories = $this->getCurrentCategory()->getParentCategory()->getChildrenCategories();
    $_count = is_array($_categories)?count($_categories):$_categories->count();
    }

    ///code end
    ?>
    <?php if($_count): ?>……

     

    catalog_category_layered 显示模式 可以进行属性筛选,比较清晰,暂时就不对这个进行处理了

    待以后补充

  • Magento数据表前缀问题笔记

    使用Magento旧版本数据库覆盖安装升级的过程中,往往新版不允许 数字或下划线开头的表前缀,如有异常则会出现以下提示

    The table prefix should contain only letters (a-z),numbers (0-9) or underscores (_), the first character should be a letter.

    出现问题但是我们又不能放弃就数据库中的数据资料,如何解决呢?

    这边贴出一个修改检测规则的方法

    修改文件

    app/code/core/Mage/Install/Model/Installer/Db.php

    修改默认
            //check table prefix
            if ($data['db_prefix'] != ”) {
                if ( !preg_match(‘/^[a-z]+[a-z0-9_]*$/’, $data['db_prefix'])) {
                    Mage::throwException(
                        Mage::helper(‘install’)->__(‘The table prefix should contain only letters (a-z), ‘
                            . ‘numbers (0-9) or underscores (_), the first character should be a letter.’));
                }
            }
    代码中检测规则为
      if ( !preg_match(‘/^[a-z0-9_]+[a-z0-9_]*$/’, $data['db_prefix'])) {
    使表前缀可以  以数字或下划线开头
    保存后,清理缓存等文件 重新安装即可。
    测试环境 Magento1.3.2.4  to  Magento1.6.1.0
  • Magento安装过程中数据表已存在解决笔记

    经常在使用旧版本的样本数据安装Magento的过程中会出现,数据表已存在的错误( Table ‘….’ already exists)

    这边以一个我在 从Magento1.3.2.4 向Magento1.6.1.0升级过程中遇到的一个类似问题来做个简单记录吧

    这边贴一段bug report
    ….Error in file: “/home/tester/public_html/app/code/core/Mage/Cms/sql/cms_setup/mysql4-upgrade-0.7.11-0.7.12.php” – SQLSTATE[42S01]: Base table or view already exists: 1050 Table ’1234_widget’ already exists”…..
    这边只截取了部分关键信息,提示表1234_widget 已存在(当然1234_ 为表前缀),但是由于原站表中可能已经有一些我们必要的数据,即使没有必须的数据,在删除表的时候可能还会引起其他的外键问题。这边暂时的折中解决方法就是再次修改检测规则。
    app/code/core/Mage/Cms/sql/cms_setup/mysql4-upgrade-0.7.11-0.7.12.php
    查看编辑此文件,代码不长 就索性贴出来吧
    $installer = $this;
    $installer->startSetup();
    if ($installer->getTable(‘cms_widget’) ) {
    $installer->run(”
    ALTER TABLE `{$installer->getTable(‘cms_widget’)}` COMMENT ‘Preconfigured Widgets’;
    ALTER TABLE `{$installer->getTable(‘cms_widget’)}` RENAME TO `{$installer->getTable(‘widget/widget’)}`;
    “);
    }
    $installer->endSetup();
    这边具体的代码执行过程就不讲了,我也不是很清楚当中的细节
    单从if语句的判断条件来看 似乎并没有检测 widget 表是否存在 (至于表前缀当然是在执行安装数据库的时候添加的)
    于是乎修改限定条件,当表已经存在的时候就不用重新建立数据表了。(Magento版本间差异还是有一定的,但是单个数据表的结构不会有太大变化,所以这边也不用担心数据表由于版本问题导致其他异常了)
    修改判断,添加此判断条件  !($installer->getTable(‘widget/widget’))  完成后代码如下
    $installer = $this;
    $installer->startSetup();
    if ($installer->getTable(‘cms_widget’) && !($installer->getTable(‘widget/widget’))) {
    $installer->run(”
    ALTER TABLE `{$installer->getTable(‘cms_widget’)}` COMMENT ‘Preconfigured Widgets’;
    ALTER TABLE `{$installer->getTable(‘cms_widget’)}` RENAME TO `{$installer->getTable(‘widget/widget’)}`;
    “);
    }
    $installer->endSetup();
    保存后清除 cache  session  及local.xml 等废弃文件
    重新安装
    安装成功

    (当然这边的只是我遇到的一个提示异常的数据表,不过相信如果其他表也出现类似的异常,也可以用类似的方法来解决问题)

    记此以作备忘 :-)

  • 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

click
©2010-2024 Jeen All Rights Reserved.Powered by emlog 京ICP备15058100号-1