在Joomla的Zt新闻4模板上,我试图在除K2项目页页面之外的所有k2页面(如本节页)上显示模块位置。
没关系,但有一个问题让我抓狂;K2项目页从顶级页面(如类别页)继承“内容容器”的类,因此在Item视图上,我的模块位置比类别视图小,内容容器将无法填充足够的宽度。除项目视图外,我使用此片段在每个k2页面上显示模块位置:
<?php
$com = JRequest::getCmd('option');
$view = JRequest::getCmd('view');
if(!($com =='com_k2' && $view!=='item')) : ?>
<jdoc:include type="modules" name="position-5" style="xhtml" />
<?php endif ?>正如预期的那样,pistion-5代码并不存在于项目视图的HTML源代码中,但内容容器仍然使用属于3列页的"span6“类。(实际上,项目页面上的内容容器需要"span9“类)。ُ通过以下函数选择这些类:
public function isContent ()
{
$modLeft = $this->theme->countModules('position-7');
$modItem = $this->theme->countModules('position-custom');
$modRight = $this->theme->countModules('position-5');
switch(true) {
case (!$modLeft && !$modItem && !$modRight):
return "span12";
case (!$modLeft && !$modRight && $modItem):
return "span9";
case (!$modRight):
return "span9";
case (!$modLeft):
return "span9";
case (!$modItem):
return "span9";
default:
return "span6";
}
}并以这种方式分配给容器:
<div class="<?php echo $function->isContent();?>">
<jdoc:include type="component" />
</div>请把我从这种困境中拯救出来
发布于 2013-09-07 20:42:32
有几个可能的解决方案,虽然我不认为我的任何建议是最佳的。
备选案文1
您可以创建一个函数来确定目标视图,这样您就不会重复。
我不确定网格宽度的确切条件是什么,或者position-custom何时起作用,但是如果我正确地理解了您,主要关注的是在禁用该模块位置时将$modRight设置为0。
public function isK2NonItem() {
$com = JRequest::getCmd('option');
$view = JRequest::getCmd('view');
return $com =='com_k2' && $view !== 'item';
}
public function isContent()
{
$modLeft = $this->theme->countModules('position-7');
$modRight = $this->theme->countModules('position-5');
if($this->isK2NonItem()) {
$modRight = 0;
}
switch(true) {
case (!$modLeft && !$modRight):
return "span12";
case (!$modRight):
return "span9";
case (!$modLeft):
return "span9";
default:
return "span6";
}
}如果必要的话,你可以根据自己的情况来调整它。从模板中移除模块位置的部分如下:
<?php
if(!$function->isK2NonItem() : ?>
<jdoc:include type="modules" name="position-5" style="xhtml" />
<?php endif; ?>这段代码基于上一段节选中的$function变量。我不知道它是否或如何被确定包含位置-5的jdoc标签的部分访问。
选项2
另一种选择是通过更改目标位置,以编程方式从该位置空出一些模块。我不确定这是否实现这一目标的最干净的方式。
要只删除某些模块,您可以拥有一个带有它们的标题或其他属性的数组,并执行以下操作:
$mods = JModuleHelper::getModules('position-5'); //gets all of the modules from the specified position
$remove_titles = array('Mod1', 'Mod2');
for($i = 0; $i < count($mods); ++$i) {
//you can alo target other module properties, such as id, module or name.
//skip the condition to clear the position completely
if(array_search($mods[$i]->title, $remove_titles) {
$mods[$i]->position = 'nonExistentPosition';
}
}为了完全清除模块位置,可以使用以下代码:
$mods = JModuleHelper::getModules('position-5');
for($i = 0; $i < count($mods); ++$i) {
$mods[$i]->position = 'nonExistentPosition';
}JModuleHelper::getModules返回一个具有position属性与所提供的条件相匹配的对象的数组(在本例中为'position-5')。必须在任何依赖于该位置内容计数的代码之前清空该职位。
https://stackoverflow.com/questions/18672832
复制相似问题