在 dokuwiki 中,如何向未登录的用户隐藏“媒体管理器”链接或顶部的任何其他链接?
8 回答
一种方法是像这样更改模板:在 /lib/tpl/dokuwiki/tpl_header.php 中:
<?php
if ($INFO['isadmin']) {
tpl_action('recent', 1, 'li'); //recent changes
tpl_action('media', 1, 'li'); //media manager
tpl_action('index', 1, 'li'); //sitemap
}
?>
不完全是您要查找的内容(无论如何可能有点晚了),但这是一种Media Manager
为所有(包括登录)用户禁用链接的方法:
- 转到管理面板,配置设置;
- 搜索禁用 DokuWiki 操作(选项名称:)
disableactions
; - 在其他操作中,添加关键字
media
(请参阅此处的参考)。
请注意,这将为所有人隐藏链接,但具有写入权限的用户仍然可以通过在编辑页面时单击相应按钮来启动媒体管理器。
如果没有用户登录,$INFO["userinfo"] 为空
在 /lib/tpl/dokuwiki/tpl_header.php 替换
tpl_toolsevent('sitetools', array(
tpl_action('recent', true, 'li', true),
tpl_action('media', true, 'li', true),
tpl_action('index', true, 'li', true)
));
和
if(!empty($INFO["userinfo"])) {
tpl_toolsevent('sitetools', array(
tpl_action('recent', true, 'li', true),
tpl_action('media', true, 'li', true),
tpl_action('index', true, 'li', true)
));
}
我的“grebo”解决方案
- 找到 inc/Action/Media.php
- 编辑方法 tplContent():
public function tplContent() {
global $INFO;
if ( empty($INFO['userinfo']) ) {
echo "<p>No way</p>";
return;
}
tpl_media();
}
因此,只有用户(而非匿名用户)才能看到媒体管理器。
创建一个插件。假设插件名称是nositetoolsanon
,所以您需要在lib/plugins/nositetoolsanon/action.php
.
<?php
if(!defined('DOKU_INC')) die();
class action_plugin_nositetoolsanon extends DokuWiki_Action_Plugin {
public function getInfo(){
return array('date'=>'2017-08-25', 'name'=>'No sitetools for anonymous users', 'author'=>'Phy25');
}
public function register(Doku_Event_Handler $controller) {
$controller->register_hook('TEMPLATE_SITETOOLS_DISPLAY', 'BEFORE', $this, 'action_link');
}
public function action_link(&$event, $param){
global $INFO;
if(empty($INFO["userinfo"])){
// more robust check by ACL: global $ID; if (auth_quickaclcheck($ID) < AUTH_READ)
$event->preventDefault();
}
}
}
此方法适用于任何模板,不会被更新覆盖。
提示:如果您想为无法读取的用户隐藏命名空间,请尝试$conf['sneaky_index'] = 1
在配置文件中进行设置,但如果更深的命名空间具有比上述更高的权限可能会导致问题。
我最近自己也有这个问题,发现选择的答案对我来说是不够的。我很确定它不起作用,因为我使用的是 Codowik 模板而不是默认模板。这就是我使用 sivann 的答案想出的。
我编辑/lib/tpl/codowik/tpl_header.php
并在顶部添加了这个:
<?php
if (!$INFO['isadmin']) {
echo "<script>
var newStyle = document.createElement('Style');
newStyle.innerHTML = '#codowiki_search_ul a {display: none;}';
document.head.appendChild(newStyle);
</script>";
}
?>
它相当 hackish,但我没有时间深入研究模板是如何实现的,而且它可以工作!
我只希望访问者和注册用户可以看到站点地图(我将该站点用作博客),因此只希望我(管理员)可以看到最近的更改和媒体链接。
这是我在“Greebo”中更改的代码,位于 inc/Menu/SiteMenu.php
protected $types = array(
//'Recent', // comment out stuff not required
//'Media',
'Index' // leave sitemap for spiders
);
// add this function
// remove the "&& $INFO['isadmin']" to allow all logged in users to see options
public function __construct(){
global $INPUT;
global $INFO;
if($INPUT->server->str('REMOTE_USER') && $INFO['isadmin']){
$this->types = array( 'Recent', 'Media', 'Index' );
}
}
我的解决方案可能会隐藏太多信息,但我们开始吧:
- 以管理员身份登录
- 进入管理部分
- 滚动到 ACL(访问控制列表)管理
- 将用户/组“@all”权限设置为“无”