Function Magento致命错误无法重新声明函数主题Blanco
我们的团队已经购买了,这是Magento的一个不错的主题。安装后,我试图进入产品详细信息页面,但出现以下错误:Function Magento致命错误无法重新声明函数主题Blanco,function,magento,themes,magento-1.7,fatal-error,Function,Magento,Themes,Magento 1.7,Fatal Error,我们的团队已经购买了,这是Magento的一个不错的主题。安装后,我试图进入产品详细信息页面,但出现以下错误: Fatal error: Cannot redeclare themeOptions() (previously declared in C:\wamp\www\magento\app\design\frontend\default\blanco\template\page\html\head.phtml:6) in C:\wamp\www\magento\app\design\fro
Fatal error: Cannot redeclare themeOptions() (previously declared in
C:\wamp\www\magento\app\design\frontend\default\blanco\template\page\html\head.phtml:6) in
C:\wamp\www\magento\app\design\frontend\default\blanco\template\page\html\head.phtml on line 113
首先,我查看提供商网站,阅读常见问题解答和任何可能的问题。运气不好,所以我把我的问题贴在那里。无论如何我都等不及他们回答了所以。。。我搜索了这个错误,在StackOverflow中找到了一些建议,还有其他一些建议。但是给出的答案没有用,或者我没有正确地实现它。已尝试使用函数\u exist
,但它阻止加载该函数,并且在“产品详细信息”页面上根本不加载主题。既不包含一次“head.html”代码>工作
我验证了该函数没有在代码的任何其他地方声明
你建议我做什么?是一个phtml文件,因此它包含php和html标记的组合。代码如下:
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"/>
<script type="text/javascript">var slide_on=false;</script>
<?php
function themeOptions ($themeOption) {
switch ($themeOption) {
/* GENERAL */
case 'additionalLink':
return Mage::getStoreConfig('mygeneral/generaloptions/additional_nav', Mage::app()->getStore()->getId());
break;
case 'menutype':
return Mage::getStoreConfig('mygeneral/generaloptions/menutype', Mage::app()->getStore()->getId());
break;
case 'use_cufon':
return (Mage::getStoreConfig('mygeneral/generaloptions/use_cufon', Mage::app()->getStore()->getId()) == 1);
break;
case 'topbanner':
return Mage::getStoreConfig('mygeneral/generaloptions/topbanner', Mage::app()->getStore()->getId());
break;
case 'phones':
return Mage::getStoreConfig('mygeneral/generaloptions/phones', Mage::app()->getStore()->getId());
break;
case 'additionalLinkUrl':
return Mage::getStoreConfig('mygeneral/generaloptions/additional_nav_href', Mage::app()->getStore()->getId());
break;
case 'topbtn':
return (Mage::getStoreConfig('mygeneral/generaloptions/topbtn', Mage::app()->getStore()->getId()) == 1);
break;
case 'enable_ajax':
return (Mage::getStoreConfig('mygeneral/generaloptions/enable_ajax', Mage::app()->getStore()->getId()) == 1);
break;
/* BackGroung */
case 'pattern':
return Mage::getStoreConfig('mygeneral/background/pattern', Mage::app()->getStore()->getId());
break;
case 'maincolor':
return Mage::getStoreConfig('mygeneral/background/maincolor', Mage::app()->getStore()->getId());
break;
case 'bg_repeat':
return Mage::getStoreConfig('mygeneral/background/bg_repeat', Mage::app()->getStore()->getId());
break;
case 'bg_attachment':
return Mage::getStoreConfig('mygeneral/background/bg_attachment', Mage::app()->getStore()->getId());
break;
case 'bg_position_x':
return Mage::getStoreConfig('mygeneral/background/bg_position_x', Mage::app()->getStore()->getId());
break;
case 'bg_position_y':
return Mage::getStoreConfig('mygeneral/background/bg_position_y', Mage::app()->getStore()->getId());
break;
/* SLIDESHOW */
case 'use_slideshow':
return (Mage::getStoreConfig('mygeneral/slideshow/use_slideshow', Mage::app()->getStore()->getId()) == 1);
break;
case 'autoplay':
return (Mage::getStoreConfig('mygeneral/slideshow/autoplay', Mage::app()->getStore()->getId()) == 1);
break;
case 'speed':
return Mage::getStoreConfig('mygeneral/slideshow/speed', Mage::app()->getStore()->getId());
break;
/* PRODUCT LIST */
case 'hover_swap':
return (Mage::getStoreConfig('mygeneral/product_list/hover_swap', Mage::app()->getStore()->getId()) == 1);
break;
case 'column_count':
return Mage::getStoreConfig('mygeneral/product_list/column_count', Mage::app()->getStore()->getId());
break;
case 'layer':
return Mage::getStoreConfig('mygeneral/product_list/layer', Mage::app()->getStore()->getId());
break;
case 'new_label':
return (Mage::getStoreConfig('mygeneral/product_list/new_label', Mage::app()->getStore()->getId()) == 1);
break;
case 'sale_label':
return (Mage::getStoreConfig('mygeneral/product_list/sale_label', Mage::app()->getStore()->getId()) == 1);
break;
case 'addto':
return (Mage::getStoreConfig('mygeneral/product_list/addto', Mage::app()->getStore()->getId()) == 1);
/* SHARE */
break;
case 'use_share':
return (Mage::getStoreConfig('mygeneral/share/use_share', Mage::app()->getStore()->getId()) == 1);
break;
case 'share_code':
return Mage::getStoreConfig('mygeneral/share/share_code', Mage::app()->getStore()->getId());
break;
/* PRODUCT PAGE */
case 'layout':
return Mage::getStoreConfig('mygeneral/productpage/layout', Mage::app()->getStore()->getId());
break;
case 'use_zoom':
return (Mage::getStoreConfig('mygeneral/productpage/use_zoom', Mage::app()->getStore()->getId()) == 1);
break;
case 'use_carousel':
return (Mage::getStoreConfig('mygeneral/productpage/use_carousel', Mage::app()->getStore()->getId()) == 1);
break;
/* COLORS */
case 'active_color':
return Mage::getStoreConfig('mygeneral/colors/active_color');
break;
case 'button_hover':
return Mage::getStoreConfig('mygeneral/colors/button_hover');
break;
}
}
?>
<meta http-equiv="Content-Type" content="<?php echo $this->getContentType() ?>" />
<title><?php echo $this->getTitle() ?></title>
<meta name="description" content="<?php echo htmlspecialchars($this->getDescription()) ?>" />
<meta name="keywords" content="<?php echo htmlspecialchars($this->getKeywords()) ?>" />
<meta name="robots" content="<?php echo htmlspecialchars($this->getRobots()) ?>" />
<link rel="icon" href="<?php echo $this->getFaviconFile(); ?>" type="image/x-icon" />
<link rel="shortcut icon" href="<?php echo $this->getFaviconFile(); ?>" type="image/x-icon" />
<!--[if lt IE 7]>
<script type="text/javascript">
//<![CDATA[
var BLANK_URL = '<?php echo $this->helper('core/js')->getJsUrl('blank.html') ?>';
var BLANK_IMG = '<?php echo $this->helper('core/js')->getJsUrl('spacer.gif') ?>';
//]]>
</script>
<![endif]-->
<script type="text/javascript">
var BASE_URL = '<?php echo $this->getBaseUrl(); ?>';
var clearenceUrl = '<?php echo themeOptions('additionalLinkUrl'); ?>';
</script>
<?php echo $this->getCssJsHtml() ?>
<?php echo $this->getChildHtml() ?>
<?php echo $this->helper('core/js')->getTranslatorScript() ?>
<?php echo $this->getIncludes() ?>
<!-- MENU -->
<?php $menutype = themeOptions('menutype'); ?>
<?php if($menutype == 1): ?>
<link rel="stylesheet" type="text/css" href="<?php echo $this->getSkinUrl('css/menu1.css'); ?>" media="screen"/>
<?php elseif($menutype == 2): ?>
<link rel="stylesheet" type="text/css" href="<?php echo $this->getSkinUrl('css/menu2.css'); ?>" media="screen"/>
<script type="text/javascript" src="<?php echo $this->getJsUrl('varien/menu.js'); ?>"></script>
<?php endif; ?>
<!-- ZOOM -->
<?php $use_zoom = themeOptions('use_zoom'); ?>
<?php if($use_zoom): ?>
<script type="text/javascript" src="<?php echo $this->getJsUrl('zoom/easyzoom.js'); ?>"></script>
<link rel="stylesheet" type="text/css" href="<?php echo $this->getSkinUrl('css/easyzoom.css'); ?>" media="screen"/>
<?php endif; ?>
<!-- CUFON -->
<?php $use_cufon = themeOptions('use_cufon'); ?>
<?php $use_slideshow = themeOptions('use_slideshow'); ?>
<?php if($use_cufon): ?>
<script type="text/javascript" src="<?php echo $this->getJsUrl('cufon/cufon-yui.js'); ?>"></script>
<script type="text/javascript" src="<?php echo $this->getJsUrl('cufon/Bebas_Neue_400.font.js'); ?>"></script>
<script type="text/javascript" src="<?php echo $this->getJsUrl('cufon/cufon-replace.js'); ?>"></script>
<?php endif; ?>
<?php
$selectors = Array();
$selectors['active_color'] = '
#nav > li.over > a > span,
#nav > li:hover > a > span,
#nav > li.active > a > span,
.product-tabs li.active a,
a:hover,
#nav > li > ul > li.parent > a:hover,
.footer-container a:hover,
.block-layered-nav dd a:hover,
.blocklist > li > ul > li a:hover,
#nav > li > ul > li ul > li a:hover,
.block-account .block-content li.current strong,
.form-search button.button:hover,
.special-price .price,
.product-tabs li a:hover,
.products-grid li.item:hover a,
.newproducts li.item:hover a,
.related li.item:hover a,
.saleproduct
';
$selectors['active_color_imp'] = '.special-price .price';
$selectors['active_bg'] = '
.pages li a:hover,
.pages .current,
button.button:hover,
.tintButton:hover,
.footer-container .form-subscribe button.button,
.add-to-cart button.button,
#added a:hover,
button.button.btn-checkout,
.opc .active .step-title,
a.readmore,
#added a,
.quantity_box_button_up:hover,
.quantity_box_button_down:hover,
.left-categorys-container a:hover,
.home-text a.readmore,
.box-tags button.button,
.tintButton,
.blocklist > li > ul > li:hover,
#nav > li > ul > li ul > li:hover,
.block-account .block-title,
.block.left-categorys .block-title
';
$selectors['active_bg2'] = '
.add-to-cart button.button:hover,
button.btn-checkout.button:hover,
#banner-rotator .tintButton:hover,
a.readmore:hover,
.box-tags button.button:hover,
#added a:hover,
.footer-container .form-subscribe button.button:hover
';
$selectors['active_border'] = '
.etheme_cp .etheme_cp_content .etheme_cp_section .pattern_select.selected,
.product-view .product-img-box .more-views a.thumbnail-active
';
$selectors['brown_color'] = '
.blocklist > li > ul > li a,
#nav > li > ul > li ul > li a';
$selectors['brown_bg'] = '
.blocklist > li > ul > li,
.left-categorys-container a,
#nav > li > ul > li ul > li';
function jsString($str='') {
return trim(preg_replace("/('|\"|\r?\n)/", '', $str));
}
?>
<style type="text/css">
/* Active Color */
<?php echo jsString($selectors['active_color']); ?> { color: #<?php echo themeOptions('active_color') ?>; }
<?php echo jsString($selectors['active_color_imp']); ?> { color: #<?php echo themeOptions('active_color') ?>!important; }
::-moz-selection, ::selection { background-color: #<?php echo themeOptions('active_color') ?>; }
/* Active BG */
<?php echo jsString($selectors['active_bg']); ?> { background-color: #<?php echo themeOptions('active_color') ?>; }
<?php echo jsString($selectors['active_bg2']); ?> { background-color: #<?php echo themeOptions('button_hover') ?>; text-decoration: underline; }
/* Active Border */
<?php echo jsString($selectors['active_border']); ?> { border-color: #<?php echo themeOptions('active_color') ?>; }
<?php echo jsString($selectors['brown_color']); ?> { color:#818181; }
<?php echo jsString($selectors['brown_bg']); ?> { background-color:#818181; }
</style>
<?php if($use_slideshow): ?>
<?php $speed = themeOptions('speed'); ?>
<script type="text/javascript">
if(slide_on){
jQuery(document).ready(function($) {
$('.iosSlider').iosSlider({
desktopClickDrag: true,
touchMoveThreshold:4,
snapToChildren: true,
infiniteSlider: true,
autoSlide:<?php echo (themeOptions('autoplay')) ? 'true' : 'false'; ?>,
autoSlideTimer:<?php echo ($speed) ? $speed : '3000' ?>,
navSlideSelector: '.sliderNavi .naviItem',
navNextSelector: '.iosSlider .next',
navPrevSelector: '.iosSlider .prev',
onSlideChange: slideContentChange,
onSlideComplete: slideContentComplete,
onSliderLoaded: slideContentLoaded
});
});
}
</script>
<?php endif; ?>
<script type="text/javascript">
jQuery(document).ready(function (){
jQuery('.toolbar').jqTransform({imgPath:'<?php echo $this->getSkinUrl('images/jqforms/'); ?>'});
jQuery('.limiter').jqTransform({imgPath:'<?php echo $this->getSkinUrl('images/jqforms/'); ?>'});
});
</script>
<style>
body{
background-color:#<?php echo themeOptions('maincolor') ?>;
background-attachment: <?php echo themeOptions('bg_attachment') ?>;
background-position: <?php echo themeOptions('bg_position_y') ?> <?php echo themeOptions('bg_position_x') ?>;
background-repeat: <?php echo themeOptions('bg_repeat') ?>;
}
</style>
<?php if(themeOptions('pattern') && themeOptions('pattern') != ''): ?>
<style>
body{ background-image: url(<?php echo Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_MEDIA).'wysiwyg/blanco/'.themeOptions('pattern') ?>); }
</style>
<?php endif; ?>
<!--[if IE 7]>
<link rel="stylesheet" type="text/css" href="<?php echo $this->getSkinUrl('css/ie7.css'); ?>" media="screen"/>
<![endif]-->
<!--[if IE 9]>
<link rel="stylesheet" type="text/css" href="<?php echo $this->getSkinUrl('css/ie9.css'); ?>" media="screen"/>
<![endif]-->
var slide_on=错误;
由于此模块的编码方式错误(php函数永远不应在模板中声明,而应在块中声明!)因此,您的问题有两种解决方案:
- 查看您的布局,了解为什么该模板包含两次。这是否正常(您试图在两个不同的位置显示此模板?如果是这样:您需要转到解决方案#2,因为无法重新声明PHP函数)
- 修改模块以使用“magento方式”(MVC):将函数声明移动到专用块中(在模块的块文件夹中)。如果需要,在模块的config.xml中声明块层,并在模块的布局xml文件中链接模板和块
并告诉模板创建者遵守magento标准;) 最后,新安装的Magento再次出现错误。在仔细查看exception.log文件和发现错误的特定phtml文件后,我通过注释一行并添加一小段代码使其正常工作
这是exception.log文件中的错误:
异常“exception”,消息为“Notice:Undefined variable:tab”
在里面
C:\wamp\www\magento\app\design\frontend\default\blanco\template\catalog\product\view\tabs.phtml
在线8'中
C:\wamp\www\magento\app\code\core\Mage\core\functions.php:245
以下是tab.phtml文件中的行:
<?php if ($tab != $this->getChildHtml('product_custom_tab')): $last = 'last'; endif; ?>
我所做的是对其进行评论并添加新行:
<?php //if ($tab != $this->getChildHtml('product_custom_tab')): $last = 'last'; endif; ?>
<?php $last = 'last'; ?>
现在一切似乎都进行得很顺利,我现在正在检查它,产品详细信息正在显示,所有花哨的滚动工作和选项卡也都正常。这篇文章为解决这个问题提供了一个良好的开端。我确实评论了雅罗斯拉夫的建议,但这并没有解决我的问题。然后
我使用了function\u exists
struct,这似乎是可行的。它必须用于head.phtml中的2个函数
1) 函数themeOption($themeOption)
2) 函数jsString($str='')
将上述函数包装在函数_出口中
if(!function_exists(themeOptions)){
function themeOptions ($themeOption) {
//Piece of Code
}
}
if(!function_exists(jsString)){
function jsString($str='') {
//Piece of Code
}
}
在这之后,一切似乎都很好。告诉他们tempalte不是放置php函数的好地方(块层专用于此!)。如果编码正确,您就不会有这个问题。询问主题提供商公司,他们会解决您的问题。他们刚刚回答:“您的日志似乎表明您正在本地服务器上测试,因此我们无法查看它。我们的模板的最新版本不应在托管时产生任何错误。”因此,除了等待他们给我一个成功的答案之外,还有什么建议吗?好的,我明天一到办公室就会试试……请不要使用f*字按照我们的一位开发人员的建议,我安装了一个新的Magento实例。在这个全新的Magento安装上,一切正常。我们将从这里开始。正如@Bixi所建议的,答案应该与代码深处对该模板布局的重复调用有关。我在以前的Magento安装中有几个不同的模块,有些是我自己制作的,有些是第三部分的。也许他们中的一些人搞乱了这个主题或类似的东西。尽管如此,我还是会遵循你的建议,努力找出问题所在。我也面临着同样的问题。我试过你的建议,但没有结果。需要清除您可能建议的任何特定缓存。谢谢,我知道了。非常感谢。你的文章为我解决这个问题提供了良好的开端。我发布我的解决方案作为答案。函数\u存在
结构为我解决了问题。需要尝试一下。在我以前的测试中,使用函数\u exists
根本无法加载详细信息页面。将检查jsString函数。此解决方案尤其不适用于我。我之前已经尝试了if(!function_exists(themeptions))
,但这次添加了一个检查jsString
函数的方法。与之前相同的结果,根本不加载详细信息页面。尽管如此,我还是会保留upvote,因为它对其他有类似问题的人有用。检查我的答案,编辑并添加错误。再次验证,两种情况下的错误相同,仅使用第一个!函数_存在
(与我的第一次测试一样),并使用两种检查(如您所建议的)。