最佳方式包括&在Magento中使用php类

时间:2012-11-17 17:40:38

标签: php magento include

我想在magento网站上使用这个mobile detection php file,我想知道这是插入php文件并在其他子模板中使用它的最佳方式,因为magento结构对我来说仍然有点棘手。

基本上我有类似main-template.phtml和header.phtml

的东西

main-template.phtml内容

<?php
    include_once 'Mobile_Detect.php';
    $detect = new Mobile_Detect();
    echo $this->getChildHtml('head');
?>
<?php if ( $detect->isMobile() ) { //condition nr.2 ?>
    <meta name="mobileMain" content="this is for mobile">
<?php } else {?>
    <meta name="NOTmobileMAIN" content="this is not for mobile">
<?php } ?>

header.phtml内容

<?php if ( $detect->isMobile() ) { //condition nr.1 ?>
    <meta name="mobile" content="this is for mobile">
<?php } else {?>
    <meta name="NOTmobile" content="this is not for mobile">
<?php } ?>

当我在浏览器中加载main-template.phtml时,第二个条件正在运行,但第一个条件会抛出错误“在非对象上调用成员函数isMobile()”。

在main-template.phtml中只包含一次Mobile_Detect.php的最佳方法是什么,然后能够在我的所有子文件中运行该条件,例如header.phtml,这些子文件也将插入到主模板中。 PHTML?

谢谢!

4 个答案:

答案 0 :(得分:17)

如果您将文件命名为Detect.php并将其放在名为magento/lib/Mobile/的新文件夹中,那么您将无需使用require_once或{{1}即可自动加载该类}。

include

MyModule的控制器

path_to_magento
  \-- app
  |     \-- code
  |     \-- design
  |     \-- etc
  \-- lib
  |     \-- Mobile
  |     |     \-- Detect.php    
  |     \-- Varien
  |     \-- Zend
  \-- skin

index.php - 使用移动检测加载适合移动设备的商店视图

<?php
    class My_Module_SomeController extends Mage_Core_Controller_Front_Action
    {
        public function indexAction()
        {
            // Will be automatically loaded from lib/Mobile/Detect.php
            $detect = new Mobile_Detect();

            if ( $detect->isMobile() ) {
                // Do something mobile-friendly
            } else {
                // Do something not
            }
        }
    }

答案 1 :(得分:1)

为什么不将PHP类作为Block类包含?

创建/重命名你的PHP classe:Yourcompany_Yourmodule_Block_Mobiledetection扩展Mage_Core_Block_Template并将其放入模块的Block目录中(我希望你有一个模块)

在皮肤/模板模块的目录中创建专用模板文件,并将特定HTML复制/粘贴到

将您的Block Class和您的phtml文件链接到模块的布局文件中。

这是在magento中构建模块的标准方法。

答案 2 :(得分:0)

您是否尝试过使用实际的类本身:

<?php
if ( Mobile_Detect::isMobile() ) { //condition nr.1
    echo '<meta name="mobile" content="this is for mobile">';
} else {
    echo '<meta name="NOTmobile" content="this is not for mobile">';
}?>

答案 3 :(得分:0)

您的问题是您在正文中加载了不在标题中的类,因此您在技术上尝试在将其加载到header.phtml文件之前使用该类。

简而言之,将include_once移至标题