وحدة:Ill-WD2
- تستخدم هذه الوحدة أساساً عبر قالب:Ill-WD2.
هذه الوحدة مستخدمة في عدد كبير من الصفحات (+547092) . لتفادي خلق بلبلة على نطاق واسع من الصفحات وزيادة الأعباء على الخوادم، يجب تجربة أي تعديل في هذه الصفحات الفرعية /ملعب أو /تجربة أو في ملعبك. بعدها يمكنك اضافة التعديلات دفعة واحدة، ورجاءً، لا تنسَ مناقشة أمر التعديلات أوّلًا قبل القيام بها. |
الهدف من القالب
يستخدم هذا القالب مثل قالب {{وصلة إنترويكي}} (وإو) ولكن يعتمد هذا القالب بشكل أساسي على عنصر ويكي بيانات الذي يتم وضعه في القيمة الثانية |المعرف=Q001
عند وجود قيمة للوسيط الأول |1=وصلة
أو يوضع في الوسيط |المعرف=Q001
عند عدم وجود أول قيمة، فإن كانت هناك وصلة في ويكي بيانات فستظهر عند عدم وضع وصلة محلية، أو تظهر بدل ذلك الوصلة التي توضع في الوسيط الأول |1=وصلة
.
- سؤال: لماذا هذا القالب؟!
- جواب: للتأكد من أن المقالة ربطت بالمقالة المطلوبة، حتى عند وجود تكرار في الاسم أو الوصلة، حيث أن القالب لا يظهر الصفحة في تصنيف:صفحات بها وصلات للإزالة إلا عند ارتباط مقالة في العنصر المطلوب في ويكي بيانات.
- في حالة وجود صفحة في ويكي بيانات للوسيط
|المعرف=
سيقوم البوت Mr.Ibrahembot بإزالة القالب ووضع الوصلة المناسبة.
الاستعمال
- الوسيط (
|المعرف=
أو|id=
) يجب أن يستخدم كشرط أساسي لعمل القالب.
استخدام |نص=
- يمكن استخدام
|نص=
في جميع الحالات التي ينتج فيها القالب وصلة، سواء حمراء أم زرقاء.{{Ill-WD2|جائزة الرئيس|المعرف=Q17011862}}
← جائزة الرئيس {{Ill-WD2|المعرف=Q76|نص=أوباما}}
← أوباما
وصلة موجودة في ويكي بيانات
- عند وجود وصلة في ويكي بيانات سيتجاهل القالب عمل الوسائط
|1=
و|لغ=
و|en=
.{{Ill-WD2|المعرف=Q76}}
← باراك أوباما
- استعمال
|1=
(يقوم القالب بتجاهله لوجود وصلة في ويكي بيانات) :{{Ill-WD2|أوباما|المعرف=Q76}}
← باراك أوباما {{Ill-WD2|أوباما|المعرف=Q76|لغ=fa}}
← باراك أوباما
- يمكن استعمال
|نص=
(ليظهر مكان الوصلة) :{{Ill-WD2|المعرف=Q76|نص=أوباما}}
← أوباما {{Ill-WD2|المعرف=Q21857932}}
← طواف العالم للدراجات 2017 {{Ill-WD2|المعرف=Q21857932|نص=طواف 2017}}
← طواف 2017
استخدام |en=
- يمكن استخدام
|en=
في جميع حالات عدم وجود وصلة عربية في ويكي بيانات: - إذا أردنا استخدام تسمية غير الإنجليزية فيمكن استخدام الوسيط
|لغ=
. - يظهر هذا الوسيط التسمية الإنجليزية في ويكي بيانات (ويضع وصلة إلى ويكيبيديا الإنجليزية) عند عدم استخدام
|1=
وعدم وجود تسمية عربية:{{وإود|en=نعم|المعرف=Q3402429}}
← Groeslon
- عند عدم وجود وصلة لويكيبيديا الإنجليزية لا ينتج شيء كالتالي:
{{وإود|en=نعم|المعرف=Q21475076}}
← Páigina percipal
استخدام |enlabel=
- إذا أردنا إضافة نص يظهر بدلًا عن التسمية الإنجليزية من ويكي بيانات بدون وصلة (في حالة عدم وجود تسمية عربية):
{{Ill-WD2|المعرف=Q15836474|enlabel=Nederland Bloeit 2011}}
← Nederland Bloeit 2011
استخدام |لغ=
وسائط بديلة: |target=
القيم المستخدمة: رمز لغة.
- يظهر الوسيط الوصلة إلى ويكي بيانات أو إلى أحد الموسوعات الشقيقة للمقالة التي نريد.
- يمكن استخدام
|لغ=
في جميع حالات عدم وجود وصلة عربية في ويكي بيانات:
- وجود تسمية عربية في ويكي بيانات أو باستخدام
|1=
{{Ill-WD2|المعرف=Q17011862|لغ=en}}
← جائزة الرابطة الوطنية لتقدّم الملونين - جائزة الرئيس {{Ill-WD2|جروسلون|المعرف=Q3402429|لغ=fa}}
← جروسلون
- عدم وجود تسمية عربية
{{Ill-WD2|المعرف=Q3402429|لغ=en}}
← Groeslon {{Ill-WD2|en=نعم|لغ=fa|المعرف=Q3402429}}
← Groeslon - عند عدم استخدام
|en=
سيظهر التسمية التي نضع رمز لغتها:{{Ill-WD2|المعرف=Q3402429|لغ=es}}
← Groeslon
- عند استخدام رمز لغة خاطئ:
- باستخدام
|en=
لإضافة التسمية الإنجليزية{{Ill-WD2|en=نعم|لغ=fai|المعرف=Q3402429}}
← Groeslon {{Ill-WD2|المعرف=Q3402429|لغ=fai}}
←
- باستخدام
تسمية عربية أو |1=
النص يساوي مقالة موجودة
- (مع استخدام
|المعرف=
للعنصر جون جونز (Q18201527))
- عند وجود تسمية عربية تساوي (جون جونز) أو أستخدمنا
|1=جون جونز
: - سيتجاهل القالب عمل وصلة إلى "جون جونز" بسبب وجود مقالة جون جونز تحمل هذا الاسم في ويكبيديا العربية وهي مرتبطة بعنصر آخر في ويكي بيانات:
- وستظهر الصفحة في تصنيف:وصلات إنترويكي بحاجة لمراجعة.
{{Ill-WD2|المعرف=Q18201527}}
← جون جونز {{Ill-WD2|جون جونز|المعرف=Q18201527}}
← جون جونز {{Ill-WD2|اليمن|المعرف=Q18201527|لغ=en}}
← اليمن
- استخدام
|1=جون جونز (كاتب مسرحي)
لنفس العنصر:{{Ill-WD2|جون جونز (كاتب مسرحي)|المعرف=Q18201527}}
← جون جونز (كاتب مسرحي) {{Ill-WD2|جون جونز (كاتب مسرحي)|المعرف=Q18201527|نص=جون جونز}}
← جون جونز {{Ill-WD2|جون جونز (كاتب مسرحي)|المعرف=Q18201527|نص=جون جونز|لغ=en}}
← جون جونز
النص لا يساوي مقالة موجودة
- مع وجود تسمية عربية:
{{Ill-WD2|المعرف=Q17011862}}
← جائزة الرابطة الوطنية لتقدّم الملونين - جائزة الرئيس {{Ill-WD2|المعرف=Q17011862|لغ=en}}
← جائزة الرابطة الوطنية لتقدّم الملونين - جائزة الرئيس {{Ill-WD2|جائزة الرئيس|المعرف=Q17011862}}
← جائزة الرئيس
أمثلة أخرى
- عدم وجود تسمية عربية وعدم استخدام
|1=
:{{Ill-WD2|المعرف=Q3402429}}
←
y
|y=أي قيمة
يستخدم عند الرغبة في إظهار السنة فقط إن كانت موجودة وإن لم تكن موجودة يظهر الوصلة كما هي، تستخدم غالبا في قوالب السباقات مثل : قالب:طواف لومبارديا- مثال بدون استخدام الوسيط:
{{Ill-WD2|المعرف=Q29456648}}
← سباق الزمن للفرق في بطولة العالم لسباق الدراجات على الطريق 2017 - مثال يستخدم الوسيط:
{{Ill-WD2|المعرف=Q29456648|y=نعم}}
← 2017
noy
|noy=أي قيمة
يستخدم عكس الوسيط السابق|y=
حيث يقوم بإزالة السنة الموجودة في نهاية التسمية:{{Ill-WD2|المعرف=Q29456648|noy=t}}
← سباق الزمن للفرق في بطولة العالم لسباق الدراجات على الطريق {{Ill-WD2|المعرف=Q1629020|noy=t}}
← طواف هوت فار {{Ill-WD2|طواف هوتفار 2011|المعرف=Q1629020|noy=t}}
← طواف هوتفار
ملاحظة
- عند عدم وجود أي وصلات لغات أخرى في عنصر ويكي بيانات لن تظهر
[لغات أخرى]
ولن تظهر وصلة عربية.- وسيتم إضافة الصفحة في: تصنيف:صفحات بها قالب:Ill-WD2 دون وصلات لغات
تصنيفات التتبع
- تصنيف:صفحات بها وصلات إنترويكي 2 (153٬251 صفحة)
- تصنيف:صفحات بها قالب:Ill-WD2 دون وصلات لغات (19٬673 صفحة)
- تصنيف:صفحات بها وصلات للإزالة (101 صفحة)
- تصنيف:وصلات إنترويكي بحاجة لمراجعة (1 صفحة)
وسائط
---@diagnostic disable: undefined-global
local p = {}
local Frame
local getArgs = require('Module:Arguments with aliases').getArgs
p.options = {}
local RTL = "‏"
local Categories = {
remove = " [[تصنيف:صفحات بها وصلات للإزالة|%s]]",
review = " [[تصنيف:وصلات إنترويكي بحاجة لمراجعة|%s]]",
nositelinks = " [[تصنيف:صفحات بها قالب:Ill-WD2 دون وصلات لغات|%s]]",
add = "[[تصنيف:صفحات بها وصلات إنترويكي 2|%s]]"
}
-- Utility Functions
local function isValid(value)
return value and value ~= "" and value or nil
end
local function debug(msg)
if isValid(p.options.debug) then
mw.log("Module:Ill-WD2: " .. msg)
end
end
local function countSiteLinks(id)
local numb = 0
local entity = mw.wikibase.getEntityObject(id)
if entity and entity.sitelinks then
for _ in pairs(entity.sitelinks) do
numb = numb + 1
end
end
debug("countSiteLinks(" .. id .. "): count = " .. numb)
return numb
end
local function getSiteLink(site, qid)
local link = mw.wikibase.sitelink(qid, site or "arwiki") or ""
debug(("getSiteLink(site=%s): link = %s"):format(site or "arwiki", link))
return link
end
local function labelIn(langcode)
local label, lang = mw.wikibase.getLabelWithLang(p.options.id)
if lang == langcode then
return label
end
debug(("labelIn(%s): label = %s, lang = %s"):format(langcode, label or "", lang or ""))
return ""
end
local function makeCategory(key)
return (isValid(p.options.nocat) and key ~= "add") and "" or Categories[key]:format(p.options.id) or ""
end
local function extractYear(str)
local patterns = {
"%d%d%d%d[%–-]%d%d%d%d%s*$",
"%d%d[%–-]%d%d%d%d%s*$",
"%d%d%d%d[%–-]%d%d%s*$",
"%d%d%d%d%s*$",
"^%d%d%d%d[%–-]%d%d%d%d%s",
"^%d%d[%–-]%d%d%d%d%s",
"^%d%d%d%d[%–-]%d%d%s",
"^%d%d%d%d%s"
}
for _, pattern in ipairs(patterns) do
local match = mw.ustring.match(str, pattern, 1)
if match then
debug("extractYear: matched pattern " .. pattern)
return match
end
end
debug("extractYear: no match found")
return str
end
local function remove_text(str, todel)
todel = mw.text.trim(todel)
str = mw.text.trim(str)
-- إزالة النص من البداية
if string.sub(str, 1, #todel) == todel then
return string.sub(str, #todel + 1)
end
-- إزالة النص من النهاية
if string.sub(str, - #todel) == todel then
return string.sub(str, 1, #str - #todel)
end
-- نستخدم دالة gsub لتحل محل النص المراد حذفه بفراغ فارغ ""
-- mw.log("remove_text: str = (" .. str .. "), todel = (" .. todel .. ")")
return str:gsub(todel, "")
end
local function removeYear(str)
if not isValid(p.options.noy) then
return str
end
local result = str
local year = extractYear(str)
if year and year ~= str then
result = remove_text(result, year)
end
debug(("removeYear: %s -> %s"):format(str, result))
return result
end
local function prepareText(str)
if isValid(p.options.text) then
return p.options.text
elseif isValid(p.options.year) then
return extractYear(str)
elseif isValid(p.options.noy) then
return removeYear(str)
end
return str
end
local function makeSuffix(targetSite, targetLink, sitelinksCount)
if sitelinksCount == 0 and not isValid(p.options.from_lua) and not isValid(p.options.wdlink) then
return makeCategory("nositelinks")
end
local other_lang = 'عنصر (' .. p.options.id .. ') في لغات أخرى'
local suffix = (' [[d:%s|<sup class=reference title="%s">[%s]</sup>]]'):format(
p.options.id .. "#sitelinks-wikipedia",
other_lang,
"لغات أخرى"
)
if isValid(targetLink) and isValid(targetSite) then
local language = Frame:callParserFunction("#language", targetSite, "ar")
suffix = ('[[:%s:%s|<sup class=reference title="%s (%s)">[%s]</sup>]]'):format(
targetSite, targetLink, targetLink, p.options.id, language
)
end
suffix = mw.text.tag("span", {
class = "noprint",
style = "font-size: smaller; font-style: normal; font-weight: normal;"
},
suffix
)
local catText = isValid(p.options.from_lua) and makeCategory("add") or ""
return " " .. suffix .. catText
end
local function makeLink(title, suffix, sitelinksCount)
local linkText = prepareText(title)
local link
local titleObj = mw.title.new(title)
local cate = isValid(p.options.from_lua) and makeCategory("review") or ""
if sitelinksCount == 0 and not isValid(p.options.wdlink) then
link = linkText .. suffix
elseif titleObj and titleObj.exists then
link = linkText .. suffix .. cate
mw.log('review "' .. title .. '", id: ' .. p.options.id)
else
title = mw.ustring.gsub(title, "^تصنيف:", "")
linkText = mw.ustring.gsub(linkText, "^تصنيف:", "")
link = ('[[%s|%s]]%s'):format(title, linkText, suffix)
end
debug("link: " .. link)
return link
end
-- Main Functions
local function parseArgs(frame)
p.options = getArgs(frame, {
aliases = {
wdlink = { "wdlink" },
debug = { "debug" },
en_label = { "enlabel" },
use_en_target = { "en" },
id = { "المعرف", "id", 2 },
label = { "label", 1 },
target = { "target", "لغ" },
nocat = { "nocat" },
noy = { "noy" },
year = { "y" },
text = { "text", "نص" },
from_lua = { "fromlua", "from_lua" }
}
})
end
-- وظيفة مساعدة للحصول على النص الإنجليزي
local function get_en_label(target)
if isValid(p.options.en_label) then
return p.options.en_label
elseif target == "en" then
return labelIn("en")
end
return ""
end
function p.link(frame)
parseArgs(frame)
Frame = frame:getParent()
local id = p.options.id
if not isValid(id) then
return "No ID"
end
-- الحصول على رابط الموقع المحلي
local localSiteLink = mw.wikibase.sitelink(id)
if localSiteLink then
-- mw.log("remove: " .. id)
return ('[[%s|%s]]%s%s'):format(
localSiteLink, prepareText(localSiteLink), makeCategory("remove"), RTL
)
end
-- تحديد الهدف الافتراضي (en) إذا تم طلب ذلك
local target = p.options.use_en_target and "en" or p.options.target
-- إعداد النصوص البديلة (en_label)
local en_label = get_en_label(target)
-- الحصول على عدد المواقع
local sitelinksCount = countSiteLinks(id)
local targetLink = isValid(target) and getSiteLink(target .. "wiki", id) or ""
local suffix = makeSuffix(target, targetLink, sitelinksCount)
-- إعداد التسمية العربية (ar_label)
local ar_link = isValid(p.options.label) or isValid(labelIn("ar"))
-- إذا كان هناك رابط عربي
if isValid(ar_link) then
debug("ar_link : " .. ar_link)
return makeLink(ar_link, suffix, sitelinksCount) .. RTL
end
-- إذا كان هناك رابط هدف
if isValid(targetLink) then
debug("target " .. target .. ": " .. targetLink)
return prepareText(targetLink) .. suffix .. RTL
end
-- إذا كان هناك نص إنجليزي (en_label)
if isValid(en_label) then
debug("en_label: " .. en_label)
return prepareText(en_label) .. makeSuffix("", "", sitelinksCount) .. RTL
end
-- إذا لم يتم العثور على أي شيء
debug("nothing found: en_label = " .. en_label)
return ""
end
return p