وحدة:Unsubst
![]() | هذه الوحدة مستخدمة في عدد كبير من الصفحات (+977600) . لتفادي خلق بلبلة على نطاق واسع من الصفحات وزيادة الأعباء على الخوادم، يجب تجربة أي تعديل في هذه الصفحات الفرعية /ملعب أو /تجربة أو في ملعبك. بعدها يمكنك اضافة التعديلات دفعة واحدة، ورجاءً، لا تنسَ مناقشة أمر التعديلات أوّلًا قبل القيام بها. |
هذه الوحدة مساعدة لتسهيل استبدال القوالب، أو منع نسخها.
قوالب الصيانة، مثل {{بحاجة لمصدر}} أو {{مصادر أكثر}}، وغيرها من قوالب المعلومات، التي لا ينبغي أبدا أن تكون منسوخة. ولتجنب نسخها، نستخدم هذه الوحدة.
الاستخدام
لعرض نصوص ويكي WikiText عندما لا يجب نسخها، يجب أن تعطى باسم "$B".
جميع المعلمات الأخرى سيتم نسخها بقيمها كما هي عبر تمريرها في استدعاء الوحدة، ويمكن تحديد قيم افتراضية لبعض الوسائط، حيث يمكن استخدام "__DATE__" كقيمة افتراضية في أحد الوسائط، وفي هذه الحالة عند نسخ القالب، سيتم وضع قيمة الوسيط "الشهر السنة" مثل "أكتوبر 2016".
بعض القوالب تحتوي على <noinclude> ولكن لا يوجد </noinclude> في نهاية القالب، وفي مثل هذه الحالة </noinclude> يجب أن تضاف الوسوم المفقودة قبل نهاية }}
وإلا فهي ستظهر مع نتيجة نسخ القالب.
لتحويل قالب إلى نفس القالب، يستخدم نفس الوسائط، بمعنى آخر لمنع نسخ النص البرمجي له، استخدم:
{{ {{{|safesubst:}}}#invoke:Unsubst||$B= النص البرمجي للقالب }}
متى لا تعمل هذه الوحدة؟
من الممكن أن يؤدي إضافة الوحدة إلى تعطيل بعض القوالب أو إخفاء ظهورها أو إخفاء ظهور جزء من القالب، وذلك في حالة كون القالب جدول ويكي أو يحتوي على نصوص الويكي الخاصة بالجداول، مثل:
{| |- |}
أو بعض منها منفردة:
{|
|}
|-
مثال
التاريخ: __DATE__
على سبيل المثال، لنفترض أن قالب:مثال يحتوي على التعليمات البرمجية التالية:
{{ {{{|safesubst:}}}#invoke:Unsubst||foo=bar |تاريخ=__DATE__ |$B= [ ... Template code goes here ... ] }}
النص البرمجي | النتيجة |
---|---|
{{subst:مثال}} | {{مثال|foo=bar|تاريخ=يونيو 2024}} |
{{subst:مثال|تج=X}} | {{مثال|تج=X|تاريخ=يونيو 2024}} |
{{subst:مثال|baz=X}} | {{مثال|foo=bar|baz=X|تاريخ=يونيو 2024}} |
{{subst:مثال|تاريخ=يناير 2001}} | {{مثال|foo=bar|تاريخ=يناير 2001}} |
local checkType = require('libraryUtil').checkType local p = {} local BODY_PARAM = '$B' local specialParams = { --#line for get function ['$N'] = 'template name', -- Deprecated, but keeping until it is removed from transcluding templates ['$params'] = 'parameter list', ['$aliases'] = 'parameter aliases', ['$flags'] = 'flags', ['$B'] = 'template content', ['$template-name'] = 'template invocation name override', } function p.main(frame, body) -- If we are substing, this function returns a template invocation, and if -- not, it returns the template body. The template body can be specified in -- the body parameter, or in the template parameter defined in the -- BODY_PARAM variable. This function can be called from Lua or from -- #invoke. -- Return the template body if we aren't substing. if not mw.isSubsting() then if body ~= nil then return body elseif frame.args[BODY_PARAM] ~= nil then return frame.args[BODY_PARAM] else error(string.format( "no template content specified (use parameter '%s' from #invoke)", BODY_PARAM ), 2) end end -- Sanity check for the frame object. if type(frame) ~= 'table' or type(frame.getParent) ~= 'function' or not frame:getParent() then error( "argument #1 to 'main' must be a frame object with a parent " .. "frame available", 2 ) end -- Find the invocation name. local mTemplateInvocation = require('Module:Template invocation') local name if frame.args['$template-name'] and '' ~= frame.args['$template-name'] then name = frame.args['$template-name'] -- override whatever the template name is with this name else name = mTemplateInvocation.name(frame:getParent():getTitle()) end -- Combine passed args with passed defaults local args = {} if string.find( ','..(frame.args['$flags'] or '')..',', ',%s*override%s*,' ) then for k, v in pairs( frame:getParent().args ) do args[k] = v end for k, v in pairs( frame.args ) do if not specialParams[k] then if v == '__DATE__' then v = mw.getContentLanguage():formatDate( 'F Y' ) end args[k] = v end end else for k, v in pairs( frame.args ) do if not specialParams[k] then if v == '__DATE__' then v = mw.getContentLanguage():formatDate( 'F Y' ) end args[k] = v end end for k, v in pairs( frame:getParent().args ) do args[k] = v end end -- Trim parameters, if not specified otherwise if not string.find( ','..(frame.args['$flags'] or '')..',', ',%s*keep%-whitespace%s*,' ) then for k, v in pairs( args ) do args[k] = mw.ustring.match(v, '^%s*(.*)%s*$') or '' end end -- Pull information from parameter aliases local aliases = {} if frame.args['$aliases'] then local list = mw.text.split( frame.args['$aliases'], '%s*,%s*' ) for k, v in ipairs( list ) do local tmp = mw.text.split( v, '%s*>%s*' ) aliases[tonumber(mw.ustring.match(tmp[1], '^[1-9][0-9]*$')) or tmp[1]] = ((tonumber(mw.ustring.match(tmp[2], '^[1-9][0-9]*$'))) or tmp[2]) end end for k, v in pairs( aliases ) do if args[k] and ( not args[v] or args[v] == '' ) then args[v] = args[k] end args[k] = nil end -- Remove empty parameters, if specified if string.find( ','..(frame.args['$flags'] or '')..',', ',%s*remove%-empty%s*,' ) then local tmp = 0 for k, v in ipairs( args ) do if v ~= '' or ( args[k+1] and args[k+1] ~= '' ) or ( args[k+2] and args[k+2] ~= '' ) then tmp = k else break end end for k, v in pairs( args ) do if v == '' then if not (type(k) == 'number' and k < tmp) then args[k] = nil end end end end -- Order parameters if frame.args['$params'] then local params, tmp = mw.text.split( frame.args['$params'], '%s*,%s*' ), {} for k, v in ipairs(params) do v = tonumber(mw.ustring.match(v, '^[1-9][0-9]*$')) or v if args[v] then tmp[v], args[v] = args[v], nil end end for k, v in pairs(args) do tmp[k], args[k] = args[k], nil end args = tmp end return mTemplateInvocation.invocation(name, args) end p[''] = p.main -- For backwards compatibility p['get'] = function ( frame ) if not frame:getParent() then error( '{{#invoke:Unsubst|}} makes no sense without a parent frame' ) end if not frame.args['$B'] then error( '{{#invoke:Unsubst|}} requires parameter $B (template content)' ) end if mw.isSubsting() then ---- substing -- Combine passed args with passed defaults local args = {} for k, v in pairs( frame.args ) do if not specialParams[k] then if v == '__DATE__' then v = mw.getContentLanguage():formatDate( 'F Y' ) end args[k] = v end end for k, v in pairs( frame:getParent().args ) do args[k] = v end -- Build an equivalent template invocation -- First, find the title to use local titleobj = mw.title.new(frame:getParent():getTitle()) local title if titleobj.namespace == 10 then -- NS_TEMPLATE title = titleobj.text elseif titleobj.namespace == 0 then -- NS_MAIN title = ':' .. titleobj.text else title = titleobj.prefixedText end if frame.args['$N'] and frame.args['$N'] ~= '' then title = frame.args['$N'] end -- Build the invocation body with numbered args first, then named local ret = '{{' .. title for k, v in ipairs( args ) do if string.find( v, '=', 1, true ) then -- likely something like 1=foo=bar, we need to do it as a named arg break end ret = ret .. '|' .. v args[k] = nil end for k, v in pairs( args ) do ret = ret .. '|' .. k .. '=' .. v end return ret .. '}}' else ---- Not substing -- Just return the "body" return frame.args['$B'] end end return p