在dokuwiki中,如何从未登录的用户中隐藏“媒体管理器”链接或顶部的任何其他链接?
答案 0 :(得分:4)
一种方法是更改模板,如下所示: 在/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
}
?>
答案 1 :(得分:2)
如果没有用户登录,则$ 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)
));
}
答案 2 :(得分:1)
创建一个插件。我们假设插件名称为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
,但it may cause issues if deeper namespaces have higher permissions than the ones above。
答案 3 :(得分:0)
不完全是你想要的东西(也许有点迟了),但这里有一种方法可以禁用所有(包括已登录)用户的Media Manager
链接:
disableactions
); media
(请参阅reference here)。请注意,这会隐藏所有人的链接,但具有写入权限的用户仍然可以在编辑页面时单击相应的按钮来启动媒体管理器。
答案 4 :(得分:0)
我最近自己提出这个问题,发现所选答案对我来说不够。我很确定它不起作用,因为我使用的是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,但我没有时间深入了解模板的实现方式,并且它有效!
答案 5 :(得分:0)
我只希望站点地图对访问者和注册用户可见(我将网站用作博客),所以只希望对我(管理员)可见最近的更改和媒体链接。
这是我在inc / Menu / SiteMenu.php的“ Greebo”中更改的代码
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' );
}
}
答案 6 :(得分:0)
我的“ grebo”解决方案
public function tplContent() {
global $INFO;
if ( empty($INFO['userinfo']) ) {
echo "<p>No way</p>";
return;
}
tpl_media();
}
因此,只有用户(而非匿名用户)可以看到媒体管理器。
答案 7 :(得分:-1)
我的解决方案可能隐藏了太多信息,但我们走了: