我想在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,它们也会插入main-template.phtml中?
谢谢!
如果将文件命名为Detect.PHP并将其放在名为magento / lib / Mobile /的新文件夹中,则无需使用require_once或include即可自动加载该类.
path_to_magento \-- app | \-- code | \-- design | \-- etc \-- lib | \-- Mobile | | \-- Detect.PHP | \-- Varien | \-- Zend \-- skin
MyModule的控制器
<?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 } } }
index.PHP – 使用移动检测加载适合移动设备的商店视图
<?PHP # Lots of stuff above... require_once $mageFilename; #Varien_Profiler::enable(); if (isset($_SERVER['MAGE_IS_DEVELOPER_MODE'])) { Mage::setIsDeveloperMode(true); } #ini_set('display_errors',1); umask(0); // This will automatically look in lib/Mobile/Detect.PHP $detect = new Mobile_Detect(); // Now you can change this store view,i.e. change your entire theme if ( $detect->isMobile() ) { // Check if a mobile store exists and prepare to load it $code = empty($_SERVER['MAGE_RUN_CODE']) ? 'mobile' : $_SERVER['MAGE_RUN_CODE'].'_mobile'; if ( Mage::app()->getStore($code) ) { $_SERVER['MAGE_RUN_CODE'] = 'mobile'; $_SERVER['MAGE_RUN_TYPE'] = 'store'; } } /* Store or website code */ $mageRunCode = isset($_SERVER['MAGE_RUN_CODE']) ? $_SERVER['MAGE_RUN_CODE'] : ''; /* Run store or run website */ $mageRunType = isset($_SERVER['MAGE_RUN_TYPE']) ? $_SERVER['MAGE_RUN_TYPE'] : 'store'; Mage::run($mageRunCode,$mageRunType);