تنظیمات

از پاپیروس
پرش به ناوبریپرش به جستجو

تنظیم فونت

برای تنظیم فونت کلی صفحه کد زیر را در Common.css وارد می‌کنیم:

body {
  /* generally a sans-serif font should be here */
  font-family: Tahoma, 'Iranian Sans', 'Noto Sans Arabic', 'DejaVu Sans', 'Noto Naskh Arabic', 'Droid Arabic Naskh', sans-serif;
}

حذف تب‌های بالای صفحه

انجام این کار به دو روش امکان پذیر است:

  1. استفاده از این افزونه. در این روش می‌توان تب‌ها را به صورت کامل یا در صفحه‌های مورد نیاز حذف کرد. اما برای نمونه امکان حذف برای کاربران وارد نشده به سیستم وجود ندارد. برای راحتی استفاده می‌توان CSS لازم را در یک الگو ذخیره کرد. با استفاده از این الگو در هر صفحه تب‌های آن صفحه حذف خواهند شد. این الگو را ببینید.
  2. استفاده از قطعه کدی در فایل پوسته. به عنوان مثال در صورتی که از پوسته مونوبوک استفاده می‌کنیم می‌توانیم برای حذف تب‌ها، برای کاربران وارد نشده به سیستم، در انتهای فایل skins/MonoBook/includes/MonoBookTemplate.php کد زیر را اضافه کنیم:
<?php
global $wgUser;
if ($wgUser->isAnon())
{
?>
      <style type="text/css">
        #ca-nstab-main, #ca-nstab-user, #ca-talk, #ca-view, #ca-edit, #ca-ve-edit,
        #ca-formedit, #ca-history, #ca-watch, #ca-unwatch, #ca-delete, #ca-move,
        #ca-protect, #ca-viewsource
{
        display:none!important;
}
      </style>
<?php
}
?>

همچنین برای حذف کردن نوار کناری برای کاربران وارد نشده به سیستم در صفحه اصلی، (علاوه بر حذف تب‌ها در همه صفحات) می توان از این قطعه کد استفاده کرد:

<?php
global $wgUser, $wgTitle;
if ($wgUser->isAnon())
{
?>
<style type="text/css">
        #ca-nstab-main, #ca-nstab-user, #ca-talk, #ca-view, #ca-edit, #ca-ve-edit,
        #ca-formedit, #ca-history, #ca-watch, #ca-unwatch, #ca-delete, #ca-move,
        #ca-protect, #ca-viewsource
        {
                display:none!important;
        }
<?php
if($wgTitle=='ﺺﻔﺤﻫٔ ﺎﺼﻟی')
{
?>
        #column-content {margin: 0 0 .6em 0;}
        #content {margin: 2.8em 0 0 0;}
        #p-logo, .generated-sidebar, #p-lang, #p-tb, #p-search
        {
                display:none;
        }
        #p-cactions { left: .1em; }
        #footer { display:none; }
        #mw_content { margin-left:0.2em; }
        div#mw-panel {
                display: none;
        }
        #left-navigation {
                left: 1em;
        }
        #mw-head-base,
        div#content,
        div#footer {
                margin-left: 1em;
        }
<?php
}
?>
</style>
<?php
}
?>


برای اطلاعات بیشتر اینجا را ببینید.

حذف لینک‌های پاورقی

برای حذف کردن لینک درباره سایت: محتوای مدیاویکی:Aboutsite را به - تغییر می‌دهیم

برای حذف کردن لینک سیاست محرمانگی: محتوای مدیاویکی:Privacy را به - تغییر می‌دهیم

برای حذف کردن متن آخرین تغییر: محتوای مدیاویکی:Lastmodifiedat را حذف می‌کنیم

برای حذف کردن لینک تکذیب‌نامه‌ها: محتوای مدیاویکی:Disclaimers را به - تغییر می‌دهیم

محدود کردن صفحات ویژه

برای غیر فعال کردن صفحات ویژه‌ی غیر ضروری برای کاربران وارد نشده به سامانه از قطعه کد زیر در فایل LocalSetting.php می‌توانیم استفاده کنیم. این کد تمام صفحات ویژه به استثنای صفحه‌های ورود به سامانه و مقاله‌ی تصادفی را غیر فعال می‌کند.

function disableUnnecessarySpecialPages( &$spList ){
<?php
        global $wgUser;
        if ($wgUser->isAnon())
        {
                $exky=array('Userlogin', 'Randompage');
                $keys=array_keys($spList);
                $nwky=array_diff($keys, $exky);
                foreach ($nwky as $value) {
                        unset( $spList[$value] );
                }
        }
        return true;
}
$wgHooks['SpecialPage_initList'][] = 'disableUnnecessarySpecialPages';
?>

در صورت نیاز و برای اطلاعات بیشتر اینجا و اینجا را ببینید.

ورود و خروج سامانه

مخفی کردن لینک

برای حذف کردن لینک‌های Login/Logout کد زیر را به انتهای LocalSettings.php اضافه می‌کنیم:

function StripLogin(&$personal_urls, &$wgTitle) {
        unset( $personal_urls["login"] ); //حذف لینک ورود
        unset( $personal_urls["logout"] ); //حذف لینک خروج
        unset( $personal_urls['anonlogin'] ); //حذف لینک نمی‌دونم چی 
        return true;
}
$wgHooks['PersonalUrls'][] = 'StripLogin';

غیرفعال کردن صفحه

برای غیرفعال کردن لینک‌های Login/Logout کد زیر را به انتهای LocalSettings.php اضافه می‌کنیم:

function LessSpecialPages(&$list) {
        unset( $list['Userlogin'] ); //غیرفعال کردن لینک ورود
        unset( $list['Userlogout'] ); //غیرفعال کردن لینک خروج
        return true;
}
$wgHooks['SpecialPage_initList'][]='LessSpecialPages';

تغییر لینک‌های کنار صفحه (Sidebar)

برای تغییر لینک‌های کنار صفحه طبق روش زیر عمل می‌کنیم:

صفحه مدیاویکی:Sidebar را ویرایش کرده و محتویات آن را به شکل زیر تغییر می‌دهیم. می‌توانیم به هرشکل که نیاز داریم آن را تغیر دهیم، مثلا در این مثال ما، تغییرات اخیر را از جعبه ناوبری به جعبه ابزار منتقل کرده‌ایم. می‌توانیم در قسمت جعبه ابزار نیز به نحو مطلوب خودمان تغییراتی ایجاد کنیم. حتی می‌توان بخش جدیدی ایجاد کرد در این مثال بخش جدیدی با نام پیوندها ایجاد می‌کنیم که علاوه بر لینک همین مقاله، لینکی به یک صفحه خارج از این وب سایت قرار می‌دهیم.

* navigation
** mainpage|mainpage-description
** randompage-url|randompage
** helppage|help
* SEARCH
* TOOLBOX
** WHATLINKSHERE|whatlinkshere
** RECENTCHANGESLINKED|recentchangeslinked-toolbox
** recentchanges-url|recentchanges
** FEEDS|feeds
** CONTRIBUTIONS|contributions
** LOG|log
** BLOCKIP|blockip
** EMAILUSER|emailuser
** USERRIGHTS|userrights
** UPLOAD|upload
** SPECIALPAGES|specialpages
** PRINT|printableversion
** PERMALINK|permalink
** INFO|pageinfo-toolboxlink
* LANGUAGES
* پیوندها
** تنظیمات|تنظیمات
** http://google.com|گوگل

حال قطعه کد زیر را در انتهای فایل LocalSettings.php اضافه می‌کنیم:

// Licence WTFPL 2.0
$wgHooks['BaseTemplateToolbox'][] = 'modifyToolbox';

function modifyToolbox( BaseTemplate $baseTemplate, array &$toolbox ) {

	static $keywords = array( 'WHATLINKSHERE', 'RECENTCHANGESLINKED', 'FEEDS', 'CONTRIBUTIONS', 'LOG', 'BLOCKIP', 'EMAILUSER', 'USERRIGHTS', 'UPLOAD', 'SPECIALPAGES', 'PRINT', 'PERMALINK', 'INFO' );

	$modifiedToolbox = array();

	// Walk in the MediaWiki:Sidebar message, section toolbox
	foreach ( $baseTemplate->data['sidebar']['TOOLBOX'] as $value ) {
		$specialLink = false;

		// Search if the keyword exists
		foreach ( $keywords as $key ) {
			if ( $value['href'] == Title::newFromText($key)->fixSpecialName()->getLinkURL() ) {
				$specialLink = true;

				// This is a keyword, hence add this special link
				if ( array_key_exists( strtolower($key), $toolbox ) ) {
					$modifiedToolbox[strtolower($key)] = $toolbox[strtolower($key)];
					break;
				}
			}
		}

		// This is a normal link
		if ( !$specialLink ) {
			$modifiedToolbox[] = $value;
		}
	}

	$toolbox = $modifiedToolbox;

	return true;
}

برای اطلاعات بیشتر می‌توان از این لینک استفاده نمود.

لیست سیاه

برای اینکه بتوان صفحه یا صفحه‌هایی را از دسترس کاربرانی که به سامانه وارد نشده‌اند یا اگر به سامانه وارد شده‌اند ولی دسترسی کافی ندارند، خارج کرد از افزونه‌ی از رده خارج شده‌ای که هنوز قابل استفاده است می‌توان استفاده کرد. نام این افزونه Blacklist است. برای استفاده باید ابندا کد زیر را در فایل extensions/blacklist.php ذخیره کرد و سپس برای فعال کردن این افزونه در فایل LocalSettings.php تغییرات زیر را ایجاد نمود:

include_once("extensions/blacklist.php"); //برای فعال سازی افزونه
$wgBlacklistOps["useRegex"] = true; //Regex برای استفاده از امکان

حال برای بستن دسترسی از کد زیر در فایل LocalSettings.php استفاده می‌کنیم. کد زیر دسترسی کاربران وارد نشده را به مقاله تنظیمات، صفحه تغییرات اخیر و همه صفحات فضای نام مدیاویکی می‌بندد:

$wgBlacklist['*']['read'] = $wgWhitelist['user']['read']=array("تنظیمات", "^مدیاویکی:.*$", "ویژه:تغییرات_اخیر");


کد

<?php
/*
    Blacklist Mediawiki Extension
    By Jeremy Pyne  jeremy dot pyne at gmail dot com

    This extension adds support for a $wgBlacklist array, layed out like $wgGroupPermissions, to support overrides.
     	For example I can set $wgBlacklist['*']['read']  to diable specific special pages or
     	make some pages of the site only visible for special groups.
    This blacklisting is done from lowest to highest powered groups and is implisit.  IE if you deny Main Page to User, it also denies it for all parent's of user.
     	To override a blacklist at a higher level ou have to add an entry to $$wgWhitelist['sysop']['read'] to re-enable the pages if you are a sysop.

    Options: 
    	$wgBlacklistOps["useRegex"] = true;
    		This setting dictates whether to tread the page lists as regular expressions or not.  Though turning regular expressions off is much faster, you can not 
    		mark page groups, partial page titles, or variations of title formating.
      
    Example: To block some special pages for normal users, but not sysops do this.
    	$wgWhitelist['sysop']['read']  = $wgBlacklist['*']['read'] = array("Special:Export", "Special:Listusers", "Special:Ipblocklist", "Special:Log", "Special:Allmessages");
    Or wth a RegEx
    	$wgBlacklistOps["useRegex"] = true;
    	$wgWhitelist['sysop']['read'] = $wgBlacklist['*']['read'] = array("^Special:(Export|Listusers|Ipblocklist|Log|Allmessages)$");

     Note: This is not flawless method as page inclusions and such can get around this.
*/

if (!defined('MEDIAWIKI')) die();

$wgExtensionCredits['other'][] = array(
    'name' => 'blacklist',
    'description' => 'adds $wgBlacklist array to provide blacklist overrides',
    'url' => 'https://www.mediawiki.org/wiki/Extension:Blacklist',
    'author' => 'Jeremy Pyne',
    'version' => '1.0'
);

$wgHooks['userCan'][] = 'checkBlacklist';

/**
 * Is this page blacklisted
 * @param &$title the concerned page
 * @param &$wgUser the current mediawiki user
 * @param $action the action performed
 * @param &$result (out) true or false, or null if we don't care about the parameters
 */
function checkBlacklist(&$title, &$wgUser, $action, &$result) {
	global $wgBlacklist;
	global $wgWhitelist;
	global $wgBlacklistOps;
	$hideMe = false;

	$groupPower = array(
		0 => "*",
		1 => "user",
		2 => "autoconfirmed",
		3 => "emailconfirmed",
		4 => "bot",
		5 => "sysop",
		6 => "bureaucrat");
	$myGroups = array_intersect($groupPower, $wgUser->getEffectiveGroups());

	foreach($myGroups as $myGroup) {
		if(array_key_exists($myGroup, $wgBlacklist) && array_key_exists($action, $wgBlacklist[$myGroup]) &&  is_array($wgBlacklist[$myGroup][$action]))
		{
			if($wgBlacklistOps["useRegex"]) {
				foreach($wgBlacklist[$myGroup][$action] as $myBlacklist)
					if(preg_match("/$myBlacklist/", $title->getPrefixedText()))
					{
						$hideMe = true;
						break;
					}
			} else {
				$myBlacklist = array_flip($wgBlacklist[$myGroup][$action]);
				if(array_key_exists($title->getPrefixedText(), $myBlacklist))
					$hideMe = true;
			}
		}

		if(array_key_exists($myGroup, $wgWhitelist) && array_key_exists($action, $wgWhitelist[$myGroup]) &&  is_array($wgWhitelist[$myGroup][$action]))
		{
			if($wgBlacklistOps["useRegex"]) {
				foreach($wgWhitelist[$myGroup][$action] as $myWhitelist)
					if(preg_match("/$myWhitelist/", $title->getPrefixedText()))
					{
						$hideMe = false;
						break;
					}
			} else {
				$myWhitelist = array_flip($wgWhitelist[$myGroup][$action]);
				if(array_key_exists($title->getPrefixedText(), $myWhitelist))
					$hideMe = false;
			}
		}
	}

	if($hideMe)
		$result = false;

	return !$hideMe;
}

برای اطلاعات بیشتر می‌توان از این لینک استفاده نمود.