SmartFAQ是由The SmartFactory(https://www.smartfactory.ca)开发,InBox Solutions(https://www.inboxsolutions.net)的分支机构。

如何根据当前查看的模块显示不同的图片或包含不同的样式表?
以下代码片段将帮助您获取主题.html中当前查看模块的目录名。您必须在相应文件夹(/themes/yourtheme/theme.html)的主题.html文件中添加以下片段。templates_c文件夹仅仅是编译了主题文件夹中的内容。
<{php}>
$mod $GLOBALS['xoopsModule'];
$dirname $mod->getVar('dirname') ?: 'system');
$GLOBALS['xoopsTpl']->assign'xoops_cmod'$dirname );
<{/
php}>
添加此片段后(无需更改),您可以通过以下smarty变量访问当前模块目录。
<{$xoops_cmod}>
新闻模块的dirname通常是"news"。因此,如果您正在浏览新闻模块,变量$xoops_cmod将包含"news"。如果您正在浏览您的个人资料,它将包含"system"。关于XOOPS 2.2.3的注意事项(由Mithrandir添加): 上述代码同样适用于2.2.3,但不需要,因为<{$xoops_dirname}>在主题中全局可用,并持有已选择模块的目录名称 - 默认为"系统"。 利用这一点,您可以在每个模块上显示不同的图片。只需尝试以下片段
<img src="<"{$xoops_imageurl}><{$xoops_cmod}>.jpg" alt="" title="" />
$xoops_imageurl 是您主题文件夹的路径。因此,您必须在那里创建一些图像,一个用于您的每个已安装的模块,以及一个用于系统的附加图像。例如,- system.jpg - news.jpg - newbb.jpg 等等。您还可以使用此变量作为包含样式表或模板的开关。
<{if $xoops_cmod == "news"}>
    
<{else}>
    
<{/if}>
此代码在许多情况下都有用。但根据您的需要使用此片段的权利归您所有。


这些评论归作者所有。我们不负责其内容。
user

 感谢 Chapi!


一个有用的附加组件...感谢您的贡献。

 
user

 回复:感谢 Chapi!


哦,真的很好。谢谢。

 
user

 这看起来真的很有趣


这篇文章很酷,解释了一些很好的技巧。我想知道这能否帮助我解决目前的问题。

我想在不每个模块中心页面的顶部显示块(或单行 PHP 代码)标题的情况下显示一个块。我的意思是,像这样:```

<h4 id="centerheading"><{$xoops_pagetitle}>h4>


此内容将出现在每个模块中中心部分的顶部。

我曾试图通过创建一个PHP模式的blobk来做这件事,但我不知道该输入什么。我遇到了PHP执行错误...

有主意吗,这样在xoops中是否可行?

 
user

 反击:这个看起来很有趣


为什么不在模块模板中直接添加这行代码?

 
user

 这不是一个好建议


这个建议违反了将代码与展示分离的原则,而且完全没有必要。如果你需要针对特定模块的标题图像,请在模块模板中进行修改!

处理不带代码的模板容易得多——在我看来,这是倒退一步,否定了Smarty为你带来的好处。

但那只是我的看法,当然

Rowd

 
user

 反击:这不是一个好建议


好吧,让我们假设一个稍微不同的情况——如果需要不同的主题(以深色和浅色为例)的不同图像。
目前你只有一个方法——覆盖原始文件... 但是——当你有
- 不同的主题
- 允许用户选择主题

你无法自动更改图像,也无法自动切换模板
因此——你只能处理
一个主题——一组图像
情况

如果在(并且当)所有模块中的所有块都具有主题意识,使用相同的技巧(for $xoops_theme)——问题可以得到解决

我真的看不出这个想法还有什么比展示更多的内容。
并且看到了现在下面缺少的灵活性

 
user

 反击:这不是一个好建议


这个建议中唯一非展示性的代码是获取模块目录名称的代码...也许这应该是核心中应该有的。

 
user

 反击:这不是一个好建议




我认为在核心代码中添加某些行,将其作为 smarty 变量添加到 theme.html 将会很好,Mithrandir

 
user

 URL 目录而不是模块目录?


非常实用。

我想知道是否有根据当前 URL 目录而不是模块目录($xoops_cmod)来做这件事的方法。

我的担忧是,这可能会限制头部图形变化仅限于特定模块。例如,如果有人使用 tinycontent,他们可能想让各个页面显示不同的图形,而不仅仅是 tinycontent 页面的一个图形。

例如,一个人可以使用 ModRewrite 来在用户输入特定 URL 时显示某个 tinycontent 页面。

这让我回到了最初的问题。是否有变量可以返回 URL 中的当前目录而不是模块目录?

两种方法都很实用。谢谢。

 
user

 切换样式表


引言

你也可以使用这个变量作为一种开关,来包含样式表或模板。


有人能提供代码和代码位置,以便允许不同的样式表。

 
user

 关于切换样式表


你好,terry,

我认为这是 chapi 将为不同模块更改样式表的方法,是吗?

<style type="text/css">

style>


当然你可以用

<link rel="stylesheet" type="text/css" media="screen" href="<{$xoops_imageurl}>stylie<{$xoops_cmod}>.css" />


替代方案。
像往常一样...

祝大家玩得开心!新年快乐!
没有阅读我的文章吗?
michael

 
user

 关于切换样式表


引言

祝大家玩得开心!新年快乐!没有阅读我的文章吗?


同样祝福你,Michael,是的,我读过了你的文章。

谢谢,


干杯,
terry

 
user

 反击:这不是一个好建议


引言

发帖人:Mithrandir 发布时间:2005/1/5 8:22:27
这个建议中唯一非展示性的代码是获取模块目录名称的代码...也许这应该是核心中应该有的。

你可以在 xoops_pagetitle 分配之后在 header.php 中添加一些东西

编辑:这里是代码;
文件:header.php
行 93 (大约)
// 设置页面标题
$xoopsTpl->assign('xoops_pagetitle'$xoopsModule->getVar('name'));

添加
// 设置 chmod
$xoopsTpl->assign('xoops_chmod'$xoopsModule->getVar('dirname'));

行 113 (大约)
// 设置页面标题
$xoopsTpl->assign('xoops_pagetitle'$xoopsModule->getVar('name'));

添加
// 设置 chmod
$xoopsTpl->assign('xoops_chmod'$xoopsModule->getVar('dirname'));

 
user

 反击:这不是一个好建议


我必须对 Chapi 对这个概念的深刻感激之情!这使创建一个酷炫的主题变得更加复杂和复杂。 没有它就无法生存。

这仅适用于模块名称。你有没有关于如何用 edituser.php 和 userinfo.php 实现类似效果的看法。“系统”对我来说太宽泛了。

 
user

 反击:这不是一个好建议


也想听听更多! :)

 
user

 反击:这不是一个好建议


好吧,当你们在思考我之前的问题时...

我还有另一个问题。当出现以下错误时是什么意思:
"对非对象调用成员函数"
来自以下行
"$GLOBALS['xoopsTpl']->assign( 'xoops_cmod', $dirname );"
在我安装的一个模块中。哦,我该如何修复它?

 
user

 回复:感谢 Chapi!


这会在2.2.3a版本中工作吗?

谢谢

 
user

 回复:感谢 Chapi!


tjnemez,会的 - 但是我已经在常见问题解答中说明了为什么在2.2.3中不再需要<{php}>部分,因为<{$xoops_dirname}>包含了所需的值。

 
user

 回复:感谢 Chapi!


引言

上面的代码同样在2.2.3版本中也能工作,但现在不再需要,因为<{$xoops_dirname}>在主题中全局可用,并包含了当前选择模块的目录名 - 默认为"System"。


那么,我在代码中应该如何添加<{$xoops_dirname}>?我假设它应该在theme.html中。

谢谢mith

 
user

 回复:感谢 Chapi!


引言

那么,我在代码中应该如何添加<{$xoops_dirname}>

在之前使用<{$xoops_cmod}>的地方。

 
user

 回复:感谢 Chapi!


感谢Mith,效果非常好!

 
user

 回复:感谢 Chapi!


Mith,你能用类似的方法来根据当前模块改变theme.html的区块布局吗?

例如 - 如果是论坛,移除所有右侧区块?

 
user

 回复:感谢 Chapi!


引言

你能用类似的方法来根据当前模块改变theme.html的区块布局吗?

当然可以。

然而,我建议通过区块管理来移除右侧区块,将右侧区块设置为不在论坛页面上显示。

 


Login

Who's Online

281 user(s) are online (21 user(s) are browsing XOOPS FAQ)


Members: 0


Guests: 281


more...

Donat-O-Meter

Stats
Goal: $100.00
Due Date: Aug 31
Gross Amount: $0.00
Net Balance: $0.00
Left to go: $100.00
Make donations with PayPal!

Did you know ?

You can call other templates inside templates

Random question

How do I remove a theme?