国际电子商务技术 & Magento开发公司

Maishen technologies

Welcome visitor! You canlogin orcreate an account.

热线:+86-0532-58973093

麦神科技有限公司
Mygod Technologies

官方认证开发工程师

magento为您自己制作的模块增加面包屑导航breadcrumbs

2012年1月10日星期二 Asia/Shanghai下午10:07:42

magento的breadcrumbs是一个不错的功能,让自己制作新的模板的时候,也需要添加上breadcrumbs,增加更好的客户体验,magento的breadcrumbs机制,是一个很好的功能,扩展起来也是非常的方便,只要在您新的模块的controller对应的actions方法添加上就可以。,下面是一个例子:

$breadcrumbs = $this->getLayout()->getBlock('breadcrumbs');
 
$breadcrumbs->addCrumb('home', array('label'=>Mage::helper('cms')->__('Home'), 'title'=>Mage::helper('cms')->__('Home Page'), 'link'=>Mage::getBaseUrl()));
 
$breadcrumbs->addCrumb('country', array('label'=>'Country', 'title'=>'All Countries', 'link'=>'http://example.com/magento/moduleName/country'));
 
$breadcrumbs->addCrumb('manufacturer', array('label'=>'State', 'title'=>'States'));
改代码要写在$this->loadLayout();之后,$this->renderLayout();之前
让您想在其他地方显示,可以使用下面的代码输出breadcrumbs
 
echo $this->getLayout()->getBlock('breadcrumbs')->toHtml();
祝您使用愉快!!
0 Comments | Posted in magento二次开发 By terry water

block中remove 和unsetChild用法的区别(二)

2011年12月16日星期五 Asia/Shanghai上午11:08:34

magento的block里面有丰富的标签,但是magento公司没有出来详细的介绍,只有一些基本的描述

具体的时候,还是得通过实践自己摸索,下面是我找到的一些区别

block中remove和unsetChild这2个标签在xml中的区别:如下

对于某个block,我们想要其他的页面都有,而这个页面没有,我们会选择在当前页面移除这个block

我们会想到选择用2个标签,unsetchild和remove

他们的原理是这样的:

unsetCild是在当前block下移除这个block,但是block还是加载执行的,只是和当前的block没有从属关系了

而remove,是删除这个block的加载,无论这个block在那个block之下,或者这个页面加载这个block N次,只要一个remove,全部清空

在具体的操作中,还是要注意一些的,譬如如下:

在我的一片文章中写过,block的写法有很多中,可以写在layout的xml文件中,也可以在模块的block中写,也可以通过controller中写,譬如:如下,在 block中写入如下:

$layout->getBlock('catalog.topnav')->setTemplate('webandpeople/custommenu/top.phtml');

这个是custom menu插件中得一块代码,如果使用<remove name="top.men">就会报错!

因为使用remove,结构就是根本不加载block,所以模块执行的找不到这个block了,就会报错。

知道这些东西,会找错,辨错,以上我描述不是很清楚,可能只可意会,不可言传吧,或者境界未到,呵呵,只能写这么多,只要明白magento的初始化过程,理解上面的内容应该不难

是否,自己以后出点模块制作的视频呀,有时间一定做一些!

0 Comments | Posted in magento二次开发 By terry water

最近遇到一个需求,做一个站的功能,只有在用户登录后才能看到网站的内容页面,如果用户未登录都跳转到注册登录页面,类似于站:https://www.dejavuwholesale.com

下面把自己做的步骤写下来和大家分享一下:

1

在目录 /template/page/html 下新建一个文件,命令为:redirect.phtml.

redirect.phtml的内容为:

<?php
Mage::getSingleton('customer/session')->setBeforeAuthUrl($this->getRequest()->getRequestUri());  //save requested URL for later redirection
if(!Mage::getSingleton('customer/session')->isLoggedIn()) {  // if not logged in
    header("Status: 301");
  //  header('Location: '.Mage::helper('core/url')->getHomeUrl(customer/account/login)) ;  // send to the login page
   header('Location:'.Mage::getBaseUrl('web').'customer/account/login/'           ) ;
    exit;
}

?>

2

在page.xml写入代码

在文件page.xml中
  <default translate="label" module="page">
        <label>All Pages</label>
        <block type="page/html" name="root" output="toHtml" template="page/3columns.phtml">

的后面加上代码:

<block type="page/html" name="auth-redirect" as="auth-redirect" template="page/html/auth-redirect.phtml"/>

3
在templatge/page
的文件
  • 1column.phtml
  • 2columns-left.phtml
  • 2columns-right.phtml
  • 3columns.phtml
的最前面加入代码
<?php
echo $this->getChildHtml('auth-redirect');
?>
4
现在是所有的页面都做跳转,但是登录和注册页面是不需要跳转的,所以要去掉
在layout文件下得custom.xml中
标签 <customer_account_login>和 <customer_account_create>
加入代码
<remove name="auth-redirect" />
5
保存,刷新缓存,重新编译即可生效!

续~如果想首页可以访问,那么,在<cms_index_index>这个标签里加入代码
<remove name="auth-redirect" />
便可!
以上可以让每一个过来的用户都注册,缺点是阻碍了谷歌的抓取,不用seo推广的站才能用这种方式作站!
0 Comments | Posted in magento二次开发 By terry water

magento的block代码有很多中方式,

1

在magento后台的xml update位置可以写入xml代码,配置block的结构

2

在layout文件中写xml代码,这是一种推荐的方式,这样比较容易查找代码,易于维护

3

在模块的controllers文件里写,譬如代码:

$this->loadLayout();
            $this->_setActiveMenu('blog/posts');

            $this->getLayout()->getBlock('head')->setCanLoadExtJs(true);

            $this->_addContent($this->getLayout()->createBlock('blog/manage_blog_edit'))
                ->_addLeft($this->getLayout()->createBlock('blog/manage_blog_edit_tabs'));

            $this->getLayout()->getBlock('head')->setCanLoadTinyMce(true);

代码的作用和在xml文件里面写得效果是一样的

4

下面是最简洁,最方面的写法,但是不易于维护,因为这种方式写得代码,当开启路径提示的时候是不显示的,还会给新手带来迷惑,我刚学magento的时候就相当的迷惑,就是找不到代码在那里,找了好久才找到,原来是这个实现的!

代码例子如下:

<?php echo $this->getLayout()->createBlock('catalog/product_list')->setTemplate('catalog/product/list.phtml')->toHtml() ?>

作用就和xml中配置效果一样,在初始化,加载完xml文件,他们的最终代码都是一样的

如果加载static block,可以使用

<?php    echo $this->getLayout()->createBlock('cms/block')->setBlockId('block_identifier')->toHtml()    ?>

效果和

<block type="cms/block" name="block_identifier">
    <action method="setBlockId"><block_id>block_identifier</block_id></action>
</block>
效果都是一样的
对于以上的各种方法不难理解,本来是一步链接数据库调取数据的过程,magento有很多步骤,才能拿到想要的数据,在有按部就班的执行方式外,快捷方式也是存在的,好处是让程序员在使用的时候更加的灵活,然而,灵活度高带来的就是复杂性,如果都是自己做的东西,还行,如果让一个新人,交接你的事情,那么,2-3天,这个程序员就了解你的代码吧,呵呵,magento,像一个大卡车,重量级的东西,各方面的成本都高!
0 Comments | Posted in magento二次开发 By terry water

magento的event机制

2011年10月27日星期四 Asia/Shanghai下午7:24:22

magento的event机制在使用起来,是一个很好的东西
在magento的各个执行的过程中,中间有很多的event,譬如sales_order_place_after,我们可以通过自己新建一个模块捕捉这个事件,代码如下:
  1. <config>  
  2.   <global>  
  3.     <events>  
  4.       <sales_order_place_after>  
  5.         <observers>  
  6.           <cartz_mypayment_order_place_after_observer>  
  7.             <type>singleton</type>  
  8.             <class>myorder/order_place_after_observer</class>  
  9.             <method>fraudCheck</method>  
  10.           </cartz_mypayment_order_place_after_observer>  
  11.         </observers>  
  12.       </sales_order_place_after>       
  13.     </events>  
  14.   </global>  
  15. </config> 

也就是在代码执行到这个event的时候,会执行models/order/place/after/observer.php的fraudCheck方法,然后这个方法接受传过来的参数,然后出来,在返回处理完成的值,这样我们就完成了event的代码的编写!

好处:可以不修改magento核心代码,又达到我们的意愿,不会影响magento的升级,易于维护!

magento的event表可以谷歌查查。

如果当你想在某个操作中想插入断代码,也就是修改原来的东西,那么,通过逻辑找找代码,看看里面是不是有event,可以捕捉,然后轻松的加入自己的代码,完成任务!

0 Comments | Posted in magento二次开发 By terry water
 
  • Mygod Technologies
  • 麦神科技有限公司
  • 香港中路8号
  • 中铁青岛中心大厦A3001
  • 市南区, 青岛, 266000
  • 电话: 0532-5897-3093

订阅我们的最新消息。

我们将严格尊重您的隐私。

关注我们的微信
获取外贸电子商务最新资讯;跨境推广最新策略;电子商务网站技术最新趋势。

2018 Mygod Technologies. 保留所有权. Privacy Policy