ວິກິພີເດຍ
lowiki
https://lo.wikipedia.org/wiki/%E0%BB%9C%E0%BB%89%E0%BA%B2%E0%BA%AB%E0%BA%BC%E0%BA%B1%E0%BA%81
MediaWiki 1.47.0-wmf.12
first-letter
ສື່
ພິເສດ
ສົນທະນາ
ຜູ້ໃຊ້
ສົນທະນາຂອງຜູ້ໃຊ້
ວິກິພີເດຍ
ສົນທະນາກ່ຽວກັບວິກິພີເດຍ
ຮູບ
ສົນທະນາກ່ຽວກັບຮູບ
ມີເດຍວິກິ
ສົນທະນາກ່ຽວກັບມີເດຍວິກິ
ແມ່ແບບ
ສົນທະນາກ່ຽວກັບແມ່ແບບ
ຊ່ວຍເຫຼືອ
ສົນທະນາກ່ຽວກັບຊ່ວຍເຫຼືອ
ໝວດ
ສົນທະນາກ່ຽວກັບໝວດ
TimedText
TimedText talk
Module
Module talk
Event
Event talk
ແມ່ແບບ:ກ່ອງຂໍ້ມູນ ຊີວະປະຫວັດ
10
5090
129393
129382
2026-07-29T09:07:57Z
Khomphoi28
15846
/* */
129393
wikitext
text/x-wiki
{{#invoke:infobox|infoboxTemplate|child={{{child|{{{embed|}}}}}}
| bodyclass = biography vcard
| above = {{#if:{{{honorific prefix|{{{honorific_prefix|{{{honorific-prefix|{{{pre-nominals|}}}}}}}}}}}}|<div class="honorific-prefix" style="font-size: 80%; font-weight: normal;">{{{honorific prefix|{{{honorific_prefix|{{{honorific-prefix|{{{pre-nominals|}}}}}}}}}}}}</div>}}<div class="fn">{{#if:{{{ຊື່|{{{name|}}}}}}|{{{ຊື່|{{{name|}}}}}}|{{PAGENAMEBASE}}}}</div>{{#if:{{{honorific suffix|{{{honorific_suffix|{{{honorific-suffix|{{{post-nominals|}}}}}}}}}}}}|<div class="honorific-suffix" style="font-size: 80%; font-weight: normal;">{{{honorific suffix|{{{honorific_suffix|{{{honorific-suffix|{{{post-nominals|}}}}}}}}}}}}</div>}}
| subheader = {{#ifeq:{{lc: {{{child|{{{embed|}}}}}}}}|yes|{{#if:{{{embed_title|}}}|'''{{{embed_title|}}}'''}}}}
| subheader2 = {{#switch:{{{child|{{{embed|}}}}}}|yes=|#default={{#if:{{{native_name|}}}|{{#if:{{{native_name_lang|}}}|<div class="nickname" lang="{{{native_name_lang}}}">}}{{{native_name}}}{{#if:{{{native_name_lang|}}}|</div>}} }} }}
| subheaderstyle2 = font-size: 125%
| image = {{#invoke:InfoboxImage|InfoboxImage|image={{{image_temple|{{{ຊື່ຮູບ|{{{ຮູບ|{{{image|}}}}}}}}}}}}|size={{#ifeq:{{lc:{{{landscape|}}}}}|yes|{{min|300|{{#if:{{#ifexpr:{{{image size|{{{image_size|{{{imagesize|{{{ຂະໜາດຮູບ|}}}}}}}}}}}}}}|300|{{{image size|{{{image_size|{{{imagesize|{{{ຂະໜາດຮູບ|}}}}}}}}}}}}}}}}x200px|{{{image size|{{{image_size|{{{imagesize|{{{ຂະໜາດຮູບ|}}}}}}}}}}}}}}|sizedefault=frameless|upright={{{image_upright|1}}}|alt={{{short_description|{{{alt|}}}}}}|suppressplaceholder=yes}}
| caption = {{{image caption|{{{ຄຳບັນຍາຍຮູບ|{{{ບັນຍາຍຮູບ|{{{caption|{{{image_caption|}}}}}}}}}}}}}}}
| label2 = ການອອກສຽງ
| data2 = {{{pronunciation|}}}
| label10 = ເກີດ
| data10 = {{br separated entries|1={{#if:{{{ຊື່ແທ້|{{{ຊື່ເມື່ອເກີດ|{{{birth name|{{{birth_name|{{{birthname|}}}}}}}}}}}}}}}|<span class="nickname">{{{ຊື່ແທ້|{{{birth name|{{{birth_name|{{{birthname|}}}}}}}}}}}}</span>}}|2={{{ວັນເກີດ|{{{birthdate|{{{birth date|{{{ເກີດ|{{{birth_date|}}}}}}}}}}}}}}}|3={{#if:{{{birthplace|{{{ບ່ອນເກີດ|{{{location|{{{birth place|{{{birth_place|}}}}}}}}}}}}}}}|<span class="birthplace">{{{birthplace|{{{ບ່ອນເກີດ|{{{location|{{{birth place|{{{birth_place|}}}}}}}}}}}}}}}</span>}}}}
| label11 = [[ພິທີຮັບເຂົ້າເປັນຄຣິດສາສະນິກະຊົນ|ບັບຕິສະມາ]]
| data11 = {{#if:{{{ວັນເກີດ|{{{birthdate|{{{birth date|{{{ເກີດ|{{{birth_date|}}}}}}}}}}}}}}}||{{{baptised|}}}}}
| label12 = ສາບສູນ
| data12 = {{Br separated entries|1={{{disappeared_date|}}}|2={{{disappeared_place|}}}}}
| label13 = ສະຖານະ
| data13 = {{{status|{{{disappeared_status|}}}}}}
| label14 = {{#if:{{{death_pronouns|}}}|{{{death_pronouns}}}|ເສຍຊີວິດ}}
| data14 = {{br separated entries|1={{{ວັນເຖິງແກ່ກຳ|{{{ວັນເສຍຊີວິດ|{{{ເສຍຊີວິດ|{{{deathdate|{{{ເຖິງແກ່ກຳ|{{{death date|{{{ວັນຕາຍ|{{{ຕາຍ|{{{death_date|}}}}}}}}}}}}}}}}}}}}}}}}}}}|2={{#if:{{{deathplace|{{{ບ່ອນເສຍຊີວິດ|{{{death place|{{{ບ່ອນຕາຍ|{{{death_place|}}}}}}}}}}}}}}}|<span class="deathplace">{{{deathplace|{{{ບ່ອນເສຍຊີວິດ|{{{death place|{{{ບ່ອນຕາຍ|{{{death_place|}}}}}}}}}}}}}}}</span>}}}}
| label15 = {{longitem|ສາເຫດເສຍຊີວິດ}}
| data15 = {{{death cause|{{{death_cause|}}}}}}
| label16 = {{longitem|ພົບຮ່າງ}}
| data16 = {{{body discovered|{{{body_discovered|}}}}}}
| label17 = {{#if:{{{burial_place|}}}|ບ່ອນຝັງສົບ|ສຸສານ}}
| data17 = {{#if:{{{burial_place|}}}|{{Br separated entries|1={{{burial_place|}}}|2={{{burial_coordinates|}}}}}|{{Br separated entries|1={{{resting place|{{{resting_place|{{{restingplace|}}}}}}}}}|2={{{resting place coordinates|{{{resting_place_coordinates|{{{restingplacecoordinates|}}}}}}}}}}}}}
| class17 = label
| label18 = ອະນຸສອນສະຖານ
| data18 = {{{monuments|}}}
| label20 = ສັນຊາດ
| data20 = {{{ສັນຊາດ|{{{ເຊື້ອຊາດ|{{{nationality|}}}}}}}}}
| class20 = category
| label21 = ຊື່ອື່ນ
| data21 = {{{other names|{{{ຊື່ອື່ນ|{{{other_names|{{{othername|{{{nickname|{{{alias|}}}}}}}}}}}}}}}}}}
| class21 = nickname
| label22 = ສັນຍະລັກແທນຊື່
| data22 = {{{siglum|}}}
| label23 = ພົນລະເມືອງ
| data23 = {{{citizenship|}}}
| class23 = category
| label24 = ການສຶກສາ
| data24 = {{{ການສຶກສາ|{{{ການສຶກສາ/ເຝິກ|{{{ວຸດທິສູງສຸດ|{{{education|}}}}}}}}}}}}
| label25 = ສິດເກົ່າ
| data25 = {{{alma mater|{{{alma_mater|}}}}}}
| label26 = ອາຊີບ
| data26 = {{{ວຽກ-ອາຊີບ|{{{ການງານ|{{{occupation|}}}}}}}}}
| class26 = role
| label27 = ປີປະຕິບັດວຽກ
| data27 = {{{years active|{{{years_active|{{{yearsactive|}}}}}}}}}
| label28 = ຍຸກສະໄໝ
| data28 = {{{era|}}}
| class28 = category
| label29 = ນາຍຈ້າງ
| data29 = {{{employer|}}}
| class29 = org
| label30 = ອົງການ
| data30 = {{{organization|{{{ສັງກັດ|{{{organizations|}}}}}}}}}
| class30 = org
| label31 = ຕົວແທນ
| data31 = {{{agent|}}}
| class31 = agent
| label32 = ມີຊື່ສຽງຈາກ
| data32 = {{{known for|{{{ກິດຕິສັບ|{{{ຄຳຍ້ອງຍໍ|{{{ກຽດປະຫວັດ|{{{known_for|{{{known|}}}}}}}}}}}}}}}}}}
| label33 = ຜົນງານ
| data33 = {{{works|}}}
| label34 = <span style="white-space:nowrap;">Notable credit</span>
| data34 = {{#if:{{{works|}}}||{{{credits|}}}}}
| label35 = ຄ້າຍ
| data35 = {{#if:{{{works|}}}{{{credits|}}}||{{{label_name|}}}}}
| label36 = <span style="white-space:nowrap;">ຜົນງານດີເດັ່ນ</span>
| data36 = {{#if:{{{works|}}}{{{credits|}}}{{{label_name|}}}||{{{notable works|{{{ງານສຳຄັນ|{{{notable_works|}}}}}}}}}}}
| label37 = ແບບແຜ່ນການກ່າວເຖິງ
| data37 = {{{style|}}}
| class37 = category
| label40 = ສ່ວນສູງ
| data40 = {{#if:{{{height_m|{{{height_cm|}}}}}}{{{height_ft|}}}{{{height_in|}}} | {{convinfobox|{{{height_m|{{{height_cm|}}}}}}|{{#if:{{{height_m|}}}|m|cm}}|{{{height_ft|}}}|ft|{{{height_in|}}}|in}}}}{{#if:{{{height|}}} | {{infobox person/height|{{{ສ່ວນສູງ|{{{height|}}}}}}}}}}
| label41 = ໂທລະພາບ
| data41 = {{{television|}}}
| label42 = {{#if:{{{office|}}}|ສຳນັກງານ|ຕຳແໜ່ງ}}
| data42 = {{{office|{{{title|}}}}}}
| class42 = title
| label43 = ວາລະ
| data43 = {{{term|}}}
| label44 = ຜູ້ດຳລົງຕຳແໜ່ງກ່ອນ
| data44 = {{{predecessor|}}}
| label45 = ຜູ້ສືບຕຳແໜ່ງ
| data45 = {{{successor|}}}
| label46 = ພັກການເມືອງ
| data46 = {{{party|}}}
| class46 = org
| label47 = ຄວາມກ່ຽວຂ້ອງ<br />ທາງການເມືອງອື່ນໆ
| data47 = {{{otherparty|}}}
| class47 = org
| label48 = ຂະບວນການ
| data48 = {{{movement|}}}
| class48 = category
| label49 = ປັດຈາມິດ
| data49 = {{{opponents|}}}
| label50 = ກຳມະການໃນ
| data50 = {{{boards|}}}
| label51 = ຖືກກ່າວຫາ
| data51 = {{{criminal_charges|{{{criminal charge|{{{criminal_charge|}}}}}}}}}
| label52 = ຮັບໂທດ
| data52 = {{{criminal penalty|{{{criminal_penalty|}}}}}}
| label53 = {{#if:{{{judicial status|{{{judicial_status|}}}}}}|ສະຖານະຕຸລາການ|ສະຖານະທາງຄະດີ}}
| data53 = {{#if:{{{judicial status|{{{judicial_status|}}}}}} | {{{judicial status|{{{judicial_status}}}}}} | {{{criminal status|{{{criminal_status|}}}}}}}}
| class53 = category
| label54 = ຄູ່ສົມລົດ
| data54 = {{{spouse|{{{spouses|{{{spouse(s)|{{{ຄູ່ສົມລົດ|}}}}}}}}}}}}
| label55 = ຄູ່ຮັກ
| data55 = {{{partner|{{{domesticpartner|{{{domestic_partner|{{{partners|{{{partner(s)|}}}}}}}}}}}}}}}
| label56 = ບຸດ
| data56 = {{{ບຸດ|{{{children|}}}}}}
| label57 = ບຸບພະກາລີ
| data57 = {{#if:{{{parents|}}}|{{{parents}}}|{{Unbulleted list|{{#if:{{{father|}}}|{{{father}}} (ບິດາ)}}|{{#if:{{{mother|}}}|{{{mother}}} (ມານດາ)}}}}}}
| label58 = ຍາດພີ່ນ້ອງ
| data58 = {{{relations|{{{relatives|}}}}}}
| label59 = ຄອບຄົວ
| data59 = {{{ຄອບຄົວ|{{{family|}}}}}}
| label60 = ສັນຍານເອີ້ນຂານ
| data60 = {{{callsign|}}}
| label61 = ລາງວັນ
| data61 = {{{ລາງວັນ|{{{awards|}}}}}}
| label62 = ກຽດຕິຍົດ
| data62 = {{{honours|{{{honors|}}}}}}
| data63 = {{{misc|{{{module|}}}}}}
| data64 = {{{misc2|{{{module2|}}}}}}
| data65 = {{{misc3|{{{module3|}}}}}}
| data66 = {{{misc4|{{{module4|}}}}}}
| data67 = {{{misc5|{{{module5|}}}}}}
| data68 = {{{misc6|{{{module6|}}}}}}
| label69 = ເວັບໄຊ
| data69 = {{{website|{{{homepage|{{{URL|{{{url|}}}}}}}}}}}}
| header70 = {{#if:{{{signature|}}}|{{if empty|{{{signature_type|}}}|ລາຍມືຊື່}}}}
| data71 = {{#invoke:InfoboxImage|InfoboxImage|image={{{signature|}}}|size={{{signature_size|}}}|class=infobox-signature skin-invert|sizedefault=150px|alt={{{signature alt|{{{signature_alt|}}}}}}}}
| header72 = {{#if:{{{footnotes|}}}|ໝາຍເຫດ}}
| data73 = {{#if:{{{footnotes|}}}|<div style="text-align: left;">{{{footnotes}}}</div>}}
}}{{#invoke:ກວດສອບພາຣາມິເຕີທີ່ບໍ່ຮູ້ຈັກ|check|unknown={{main other|[[ໝວດ:ໜ້າທີ່ໃຊ້{{if empty|{{#invoke:String|replace|{{{template_name|}}}| |}}|ກ່ອງຂໍ້ມູນຊີວະປະຫວັດ}}ທີ່ມາພາຣາມິເຕີທີ່ບໍ່ຮູ້ຈັກ|VALUE{{PAGENAME}}]]}}|preview = ໜ້າທີ່ໃຊ້ [[ແມ່ແບບ:{{#if:{{{template_name|}}}|{{ucfirst:{{{template_name|}}}}}|ກ່ອງຂໍ້ມູນ ຊີວະປະຫວັດ}}]] ທີ່ມີພາຣາມິເຕີທີ່ບໍ່ຮູ້ຈັກ "VALUE"|ignoreblank=n
| abovestyle | agent | alias | alma mater | alma_mater | alt | awards | baptised | baptized | birth_date | birth_name | birth_place | birthname | boards | body discovered | body_discovered | burial_coordinates | burial_place | callsign | caption | child | children | citizenship | credits | criminal charge | criminal penalty | criminal status | criminal_charge | criminal_charges | criminal_penalty | criminal_status | death cause | death_cause | death_date | death_place | death_pronouns | disappeared_date | disappeared_place | disappeared_status | domestic_partner | domesticpartner | education | embed | employer | era | family | father | footnotes | height | height_cm | height_ft | height_in | height_m | homepage | honorific prefix | honorific suffix | honorific_prefix | honorific_suffix | honorific-prefix | honorific-suffix | honors | honours | image | image caption | image size | image_caption | image_size | image_upright | imagesize | judicial status | judicial_status | known | known for | known_for | label_name | landscape | misc | misc2 | misc3 | misc4 | misc5 | misc6 | module | module2 | module3 | module4 | module5 | module6 | monuments | mother | movement | name | nationality | native_name | native_name_lang | net worth | net_worth | networth | nickname | nocat_wdimage | notable works | notable_works | occupation | office | opponents | organisation | organization | organizations | other names | other_names | othername | otherparty | parents | partner | partners | partner(s) | party | predecessor | pre-nominals | post-nominals | pronunciation | relations | relatives | resting place | resting place coordinates | resting_place | resting_place_coordinates | restingplace | restingplacecoordinates | siglum | signature | signature_type | signature alt | signature_alt | signature_size | spouse | spouses | spouse(s) | status | style | successor | template_name | television | term | title | URL | url | website | works | weight | years active | years_active | yearsactive }}{{Main other|
{{#if:{{{1|}}}{{{2|}}}{{{3|}}}{{{4|}}}{{{5|}}}|[[ໝວດ:ກ່ອງຂໍ້ມູນຊີວະປະຫວັດໃຊ້ພາຣາມິເຕີຕົວເລກ]]}}{{#if:{{{ວັນເຖິງແກ່ກຳ|{{{ວັນເສຍຊີວິດ|{{{ເສຍຊີວິດ|{{{deathdate|{{{ເຖິງແກ່ກຳ|{{{death date|{{{ວັນຕາຍ|{{{ຕາຍ|{{{death_date|}}}}}}}}}}}}}}}}}}}}}}}}}}}{{{deathplace|{{{ບ່ອນເສຍຊີວິດ|{{{death place|{{{ບ່ອນຕາຍ|{{{death_place|}}}}}}}}}}}}}}}|{{#if:{{{salary|}}}{{{net worth|{{{net_worth|{{{networth|}}}}}}}}}|[[Category:ກ່ອງຂໍ້ມູນຊີວະປະຫວັດໃຊ້ພາຣາມິເຕີບາງຢ່າງເມື່ອລາວເສຍຊີວິດແລ້ວ]]}}}}{{#if:{{{pronunciation|}}}|[[ໝວດ:ແມ່ແບບຊີວະປະຫວັດໃຊ້ pronunciation]]}}{{#if:{{{signature|}}}|[[ໝວດ:ຊີວະປະຫວັດທີ່ມີລາຍມືຊື່]]}}[[ໝວດ:Articles with hCards]]
}}{{#invoke:Check for conflicting parameters|check
| nested = 1
| template = [[ແມ່ແບບ:{{#if:{{{template_name|}}}|{{ucfirst:{{{template_name|}}}}}|ກ່ອງຂໍ້ມູນ ຊີວະປະຫວັດ}}]]
| cat = {{main other|ໝວດ:ໜ້າທີ່ໃຊ້{{if empty|{{#invoke:String|replace|{{{template_name|}}}| |}}|ກ່ອງຂໍ້ມູນຊີວະປະຫວັດ}}ທີ່ມີພາຣາມິເຕີຂັດແຍ້ງກັນ}}
| child; embed
| honorific prefix; honorific_prefix; honorific-prefix; pre-nominals
| honorific suffix; honorific_suffix; honorific-suffix; post-nominals
| image size; image_size; imagesize
| image caption; caption; image_caption
| birth_name; birthname
| baptized; baptised
| status; disappeared_status
| death cause; death_cause
| body discovered; body_discovered
| resting place; resting_place; restingplace
| resting place coordinates; resting_place_coordinates; restingplacecoordinates
| other names; other_names; othername; nickname; alias
| alma mater; alma_mater
| years active; years_active; yearsactive
| organisation; organization; organizations
| known for= known_for; known
| {{#if:{{{works|}}}|works;}} {{#if:{{{credits|}}}|credits;}} {{#if:{{{label_name|}}}|label_name;}} notable works; notable_works
| net worth; net_worth; networth
| height_m; height_cm
| office; title
| criminal_charges; criminal charge; criminal_charge
| criminal penalty; criminal_penalty
| judicial status; judicial_status
| criminal status; criminal_status
| spouse; spouses; spouse(s)
| partner; domesticpartner; domestic_partner; partners; partner(s)
| {{#if:{{{parents|}}}||NULL_}}parents; {{#if:{{{father|}}}||NULL_}}father
| {{#if:{{{parents|}}}||NULL_}}parents; {{#if:{{{mother|}}}||NULL_}}mother
| relations; relatives
| honours; honors
| misc; module
| misc2; module2
| misc3; module3
| misc4; module4
| misc5; module5
| misc6; module6
| website; homepage; URL; url
}}{{main other|{{#if:{{{net worth|{{{net_worth|{{{networth|}}}}}}}}}|[[ໝວດ:ໜ້າທີ່ໃຊ້ກ່ອງຂໍ້ມູນຊີວະປະຫວັດທີ່ມີພາຣາມິເຕີມູນຄ່າສຸດທິທີ່ຫຼ້າສະໄໝ]]}}}}<includeonly>{{#ifeq:{{{child|{{{embed|}}}}}}|yes||{{Wikidata image|1={{{image|}}}|2={{{nocat_wdimage|}}}}}}}</includeonly><noinclude>
{{ຄູ່ມືການໃຊ້ງານ}}</noinclude>
4eju1kmomgxpmzwmnl9b9htbylw07zk
ສະຫຍາມມຸງກຸດລາຊະກຸມານ
0
9658
129389
104487
2026-07-29T08:15:15Z
~2026-42097-27
23791
สยามมกุฎราชกุมาร
129389
wikitext
text/x-wiki
{{ກ່ອງຂໍ້ມູນ ຕຳແໜ່ງທາງການເມືອງ
| post = ສະຫຍາມມຸງກຸດລາຊະກຸມານ
| nativename = สยามมกุฎราชกุมาร
| insignia =
| insigniasize =
| insigniacaption =
| flag = Crown Prince's Standard of Thailand.svg
| flagsize = 120px
| flagborder = yes
| flagcaption = ທຸງປະຈຳພະອິສະລິຍົດ
| image =
| imagesize = 200px
| incumbent = ວ່າງ
| incumbentsince = 13 ຕຸລາ ຄ.ສ. 2016
| style = ສົມເດັດພະບໍລົມໂອລະສາທິລາດຯ ສະຫຍາມມຸງກຸດລາຊະກຸມານ<br><small>(ທາງການ)</small><br>ໃຕ້ຝ່າລະອອງພະບາດ<br><small>(ທາງການ)</small>
| member_of = [[ລາຊະວົງຈັກກີ]]
| seat =
| residence =
| nominator =
| appointer = [[ພະມະຫາກະສັດໄທ]]
| termlength = ຈົນກວ່າຈະສືບລາຊະສົມບັດ
| termlength_qualified =
| constituting_instrument =
| formation = 14 ມັງກອນ ຄ.ສ. 1886
| precursor =
| salary =
| inaugural = [[ສົມເດັດພະບໍລົມໂອລະສາທິລາດ ເຈົ້າຟ້າມະຫາວະຊິຣຸນນະຫິດ ສະຫຍາມມຸງກຸດລາຊະກຸມານ]]
| deputy =
| website = [https://www.royaloffice.th/en/home/ royaloffice]
}}
[[File:Crown Prince's Standard of Thailand.svg|thumb|ธงเยาวราชใหญ่ฝ่ายหน้า ลักษณะเป็นพื้นสี่เหลี่ยมจัตุรัสสีน้ำเงิน ตรงกลางมีสี่เหลี่ยมจัตุรัสสีเหลือง กลางสี่เหลี่ยมสีเหลืองมีพระราชลัญจกรพระครุฑพ่าห์สีแดง|ธงเยาวราชใหญ่|ທຸງເຍົາວະລາດໃຫຍ່]]
'''ສະຫຍາມມຸງກຸດລາຊະກຸມານ''' ({{lang-th|สยามมกุฎราชกุมาร}}) ແມ່ນພະອິສະລິຍະຍົດ[[ມຸງກຸດລາຊະກຸມານ]]ຂອງປະເທດໄທ ເຊິ່ງພະອິສະຣິຍະຍົດຂອງຜູ້ທີ່ຈະສືບລາຊະສົມບັດຕໍ່ຈາກ[[ພະມະຫາກະສັດໄທ]]ໂດຍສະຫຍາມມຸງກຸດລາຊະກຸມານຈະດຳລົງພະຍົດນີ້ໄປຈົນກວ່າພະມະຫາກະສັດຈະສະຫວັນຄົດຫຼືສະຫຼະລາຊະສົມບັດ
ພະຍົດນີ້[[ພະບາດສົມເດັດພະຈຸລະຈອມເກົ້າຢູ່ຫົວ]]ເປັນຜູ້ຊົງກຳໜົດຂຶ້ນເມື່ອ ຄ.ສ.1886 ເພື່ອເປັນລັດຊະທາຍາດແທນ[[ກົມພະລາຊະວັງບໍວອນສະຖານມົງຄົນ]] ຫຼື [[ວັງໜ້າ]] ແລະຕຳແໜ່ງ[[ພະມະຫາອຸປະຫຼາດ]] ເຊິ່ງໃຊ້ສືບຕໍ່ກັນມາຕັ້ງແຕ່ຄັ້ງ[[ກຸງສີອະຍຸທະຍາ]]
==ປະຫວັດ==
ໃນສະໄໝກຸງສີອະຍຸທະຍາ [[ສົມເດັດພະຮາມາທິບໍດີທີ່ 1]] ຊົງກາກົດມົນເທຍລະບານເຊິ່ງມີການລຳດັບຍົດຂອງພະບໍຣົມວົງສານຸວົງແລະຂ້າລາຊະການທົ່ວໄປໃນກົດມົນເທຍລະບານນັ້ນລຳດັບພະຍົດຂອງພະລາຊະໂອລົດພະອົງໃຫຍ່ທີ່ປະສູດແຕ່ພະອັກຄະລະມະເຫສີເປັນ ''ສົມເດັດໜໍ່ພະພຸດທະເຈົ້າ'' ມີພະກຽດຕິຍົດເໜືອກວ່າພະບໍຣົມວົງສານຸວົງທັງປວງ ແຕ່ບໍ່ໄດ້ກຳໜົດຊັດເຈນວ່າຕຳແໜ່ງສົມເດັດໜໍ່ພະພຸດທະເຈົ້າເປັນລັດທາຍາດ ຈົນກະທັ່ງໃນລາຊະສະໄໝ[[ສົມເດັດພະບໍລົມໄຕໂລກະນາດ]] ຊົງກາພະລາຊະກຳໜົດສັກດິນາພົນລະເຮືອນຂຶ້ນ ຈຶງຊົງກຳໜົດໃຫ້ສົມເດັດພະເຈົ້າລູກຢາເທີເຊິ່ງໄດ້ສະເຫຼີມພະລາຊະມົນທຽນແລ້ວຊົງສັກດິນາໜຶ່ງແສນດຳລົງພະລາຊະອິສະຣິຍະຍົດເປັນພະມະຫາອຸປະຫຼາດ ແຕ່ຕຳແໜ່ງພະມະຫາອຸປະຫຼາດກໍບໍ່ໄດ້ແຕ່ງຕັ້ງໃນທຸກແຜ່ນດິນ
ສ່ວນສະໄໝ[[ກຸງລັດຕະນະໂກສິນ]]ນັ້ນ ພະມະຫາກະສັດຊົງແຕ່ງຕັ້ງພະມະຫາອຸປະຫຼາດ (ກົມພະລາຊະວັງບໍວອນສະຖານມົງຄົນ) ໃນທຸກລາຊະການໂດຍເປັນຕຳແໜ່ງສຳລັບພະລາຊະທານແກ່ພະບໍຣົມວົງສານຸວົງພະອົງໃດທີ່ມີຄວາມຊອບສະເໝີເໝືອນ ພະມະຫາກະສັດກໍບໍ່ຊົງແຕ່ງຕັ້ງພະບໍຣົມວົງສານຸວົງພະອົງໃດທີ່ພະມະຫາອຸປະຫຼາດ ຈົນຮອດລາຊະສະໄໝ[[ພະບາດສົມເດັດພະຈຸລະຈອມເກົ້າເຈົ້າຢູ່ຫົວ]] ຫຼັງຈາກທີ່[[ກົມພະລາຊະວັງບໍວອນວິເສດໄຊຊານ]]ສະເດັດທິວົງຄົດພະອົງມີພະລາຊະດຳຣິວ່າທີ່ ຕຳແໜ່ງກົມພະລາຊະວັງບໍວອນສະຖານມົງຄົນບໍ່ເໝາະສົມກາລະສະໄໝແລະອາດເຮັດໃຫ້ຊາວຕ່າງປະເທດເຂົ້າໃຈສັບສົນແລະມີພະລາຊະດຳຣິວ່າ ພະລາຊະອິສະຣິຍະຍົດ ''ສົມເດັດພະບໍຣົມໂອຣະສາທິລາດ'' ເຊິ່ງຮຽກວ່າ ສົມເດັດໜໍ່ພະພຸດທະເຈົ້າທີ່ໄດ້ຕັ້ງຂຶ້ນໄວ້ຕັ້ງແຕ່ຄັ້ງສົມເດັດພະຣາມາທິບໍດີທີ່ 1 ເປັນຕຳແໜ່ງທີ່ສອດຄ້ອງຕາມແບບຢ່າງການສືບສັນຕະຕິວົງຂອງພະມະຫາກະສັດໃນນານາອາລະຍະປະເທດ ທີ່ມີລາຊະປະເພນີແຕ່ງຕັ້ງພະລາຊະໂອລົດອົງໃຫຍ່ເປັນມຸງກຸດລາຊະກຸມານດຳລົງຕຳແໜ່ງລາຊະທາຍາດ ຈຶງມີພະບໍຣົມລາຊະໂອງການປະກາດຍົກເລີກຕໄແໜ່ງກົມພະລາຊະວັງບໍວອນສະຖານມົງຄົນ ຕັ້ງແຕ່ປີ ຄ.ສ.1885 ແລະໂປດໃຫ້ມີຕຳແໜ່ງ ''ສົມເດັດພະບໍຣົມໂອຣະສາທິລາດ ສະຫຍາມມຸງກຸດລາຊະກຸມານ'' ເຊິ່ງເປັນຕຳແໜ່ງທີ່ຈະຊົງເປັນລາຊະທາຍາດສືບລາຊະສັນຕະຕິວົງສືບໄປ
== ທຸງປະຈຳພະອົງ ==
[[File:Standard of the Crown Prince of Siam.svg|thumb|Standard of the Crown Prince of Siam 1891-1910|ธงเยาวราช|ທຸງເຍົາວະລາດ]]
[[File:Board Pennant for the Crown Prince of Thailand.svg|thumb|ธงเยาวราชน้อยฝ่ายหน้า สำหรับสมเด็จพระยุพราช (มกุฎราชกุมาร) แห่งประเทศไทย มีลักษณะตามความมาตรา 9(2) แห่งพระราชบัญญัติธง พ.ศ. 2522 ดังนี้ "ธงเยาวราชน้อย แบ่งตามความยาวออกเป็นสองตอน ตอนต้นมีลักษณะและสีอย่างเดียวกับธงเยาวราชใหญ่ แต่กว้างไม่เกิน ๖๐ เซนติเมตร ตอนปลายมีลักษณะเป็นชายต่อสีขาวแปลงเป็นรูปธงยาวเรียวโดยให้ปลายสุดกว้างครึ่งหนึ่งของตอนต้น ปลายธงตัดเป็นแฉกรูปหางนกแซงแซวลึก ๓ ใน ๘ ส่วนของความยาวของผืนธง ความยาวของผืนธงเป็น ๘ เท่าของความกว้างของตอนต้น ธงนี้ถ้าชักขึ้นแทนธงเยาวราชใหญ่ หมายความว่า โปรดเกล้า ฯ ให้งดการยิงสลุตถวายคำนับ"|ธงเยาวราชน้อย|ທຸງເຍົາວະລາດໜ້ອຍ]]
ທຸງປະຈຳພະອົງພະອົງສົມເດັດພະບໍຣົມໂອຣະສາທິລາດ ສະຫຍາມມຸງກຸດລາຊະກຸມານ ຮຽກວ່າ [[ທຸງພະອິສະຣິຍະຍົດໃນປະເທດໄທ|ທຸງເຍົາວະລາດ]]ມີຂຶ້ນຄັ້ງທຳອິດເມື່ອ ຄ.ສ. 1897 ມີພື້ນສີຂາບ ຂະໜາດກວ້າງ 5 ສ່ວນ ຍາວ 6 ສ່ວນ ຮູບເຄື່ອງໝາຍກາງທຸງເໝືອນຢ່າງ[[ທຸງພະອິສະຣິຍະຍົດໃນປະເທດໄທ|ທຸງມະຫາລາດ]]ກ່າວຄື ກົງກາງເປັນຮູບໂລ່ ໃນໂລ່ແບ່ງອອກເປັນ 3 ຊ່ອງ ຊ່ອງບົນເປັນຮູບຊ້າງໄອຍະຣາພົດຢູ່ບົນພື້ນສີເຫຼືອງບອກນາມສະຫຍາມເໜືອ ສະຫຍາມໃຕ້ແລະສະຫຍາມກາງ ຊ່ອງລ່າງຂ້າງຂວາເປັນຮູບຊ້າງເຜືອກບົນພື້ນຊົມພູຫັນອອກໄປຂ້າງເສົາ ເປັນນາມສັນຢາແຫ່ງລາວປະເທດ ຊ່ອງລ່າງຊ້າຍເປັນຮູບກົດຊະຄົດແລະກົງສອງອັນໄຂວ້ກັນຢູ່ບົນພື້ນແດງບອກນາມສັນຢາມະລາຍູປະເທດ ເບື້ອງບົນແຫ່ງໂລ່ມີຈັກກີໄຂວ້ກັນແລະມີ[[ພະມະຫາພິໄຊມຸງກຸດ]]ສວມຢູ່ບົນຈັກກີ ແຕ່ເຄື່ອງສູງຂ້າງໂລ່ຂອງທຸງເຍົາວະລາດນັ້ນເປັນ 5 ຊັ້ນ ທຸງເຍົາວະລາດນີ້ສຳລັບຊັກຂຶ້ນບົນເສົາໃນເຮືອພະທີ່ນັ່ງຫຼືເຮືອລຳໜຶ່ງລຳໃດ ເຊິ່ງສົມເດັດພະບໍຣົມໂອຣະສາທິລາດ ສະຫຍາມມຸງກຸດລາຊະກຸມານສະເດັດໂດຍອິສະຣິຍະຍົດເປັນທີ່ໝາຍໃຫ້ປະກົດວ່າໄດ້ສະເດັດຢູ່ໃນເຮືອລຳນັ້ນ
ຄັ້ນຮອດລາຊະສະໄໝພະບາດສົມເດັດພະມຸງກຸດເກົ້າເຈົ້າຢູ່ຫົວ ພະອົງໂປດໃຫ້ຍົກເລີກທຸງເຍົາວະລາດແລ້ວປ່ຽນເປັນ[[ທຸງພະອິສະຣິຍະຍົດໃນປະເທດໄທ|ທຸງເຍົາວະລາດໃຫຍ່]]ແລະ[[ທຸງພະອິສະຣິຍະຍົດໃນປະເທດໄທ|ທຸງເຍົາວະລາດນ້ອຍ]] ປັດຈຸບັນ ທຸງເຍົາວະລາດໃຫຍ່ເປັນຮູບສີ່ລ່ຽມຈະຕຸລັດ ພື້ນທຸງມີ 2 ສີ ພື້ນຮອບນອກສີຂາບ ພື້ນຮອບໃນສີເຫຼືອງກວ້າງເຄິ່ງສ່ວນຂອງພື້ນຮອບນອກ ກົງກາງຮອບໃນມີຮູບຄຸດພ່າສີແດງ ສ່ວນທຸງເຍົາວະລາດໜ້ອຍແບ່ງຄວາມຍາວອອກເປັນ 2 ຕອນ ຕອນຕົ້ນມີລັກສະນະແລະສັນຖານເໝືອນກັບທຸງເຍົາວະລາດໃຫຍ່ແຕ່ກວ້າງບໍ່ເກີນກວ່າ 60 ເຊັນຕິແມັດ ຕອນປາຍມີລັກສະນະເປັນຊາຍຕໍ່ສີຂາວແປງເປັນຮູບທຸງຍາວລຽວ ໂດຍໃຫ້ປາຍສຸດກວ້າງເຄິ່ງໜຶ່ງຕົ້ນ ປາຍທຸງຕັດເປັນແສກຮູບຫາງນົກແຊງແຊວລຶກ 3 ໃນ 8 ສ່ວນຂອງຄວາມຍາວຂອງຜືນທຸງ ຄວາມຍາວຂອງຜືນທຸງເປັນ 8 ເທົ່າຂອງຄວາມກວ້າງຂອງຕອນຕົ້ນ ທຸງນີ້ຖ້າຊັກຂຶ້ນແທນທຸງເຍົາວະລາດໃຫຍ່ ໝາຍຄວາມວ່າ ໂປດເກົ້າຯ ໃຫ້ງົດການຍິງສະລຸດຖະຫວາຍຄຳນັບ
== ເຄື່ອງລາດອິສະຣິຍະຍົດ ==
[[ເຄື່ອງອິສະລິຍະຍົດໄທ|ເຄື່ອງປະກອບລາຊະອິສະລິຍະຍົດ]]ປະຈຳຕຳແໜ່ງສົມເດັດພະບໍຣົມໂອຣະສາທິລາດ ສະຫຍາມມຸງກຸດລາຊະກຸມານ ໃນປັດຈຸບັນ ປະກອບດ້ວຍ
*[[ພະສຸພັນນະບັດ]] ພ້ອມຫີບຄຳລົງຢາ ພປຣ. ປະດັບເພັດແລະພະລາຊະລັນຈະກອນ
* '''ໝວດເຄື່ອງສິລາພອນ'''
** ພະອະນຸລາດມຸງກຸດ
** ພະມາລາເສົ້າສູງເຄື່ອງຄຳລົງຢາ
* '''ໝວດເຄື່ອງສັດຕາວຸດ'''
** ພະແສງຝັກທອງກ້ຽງ
** ພະແສງກະບີ່ສັນປຸຄຳລົງຢາສີສະ
ນາກສາມສຽນ
* '''ໝວດເຄື່ອງລາຊະພອນອັນເປັນມົງຄົນ'''
** ພະສັງວານພະນົບໜ້ອຍ ພະປະຄຳທອງຄຳພະດິ່ງທອງຄ່ຳສາຍທອງ ພະຕະກຸດຄຳລົງຢາປະດັບສາຍຄຳ ພະທຳມະລົງນົບພະຣັດ
* '''ໝວດເຄື່ອງຣາຊູປະໂພກ'''
** ພານພະສີຄຳລົງຢາເຄື່ອງພ້ອມ ພະຄົນໂທຄຳລົງຢາພ້ອມພານຮອງ ພະສຸວັນນະສີຄຳລົງຢາ ຫີບພະສີໄມ້ແດງຫຸ້ມຄຳລົງຢາພ້ອມພານຮອງ ກາກະບອກຄຳ
== ລາຍພະນາມສະຫຍາມມຸງກຸດລາຊະກຸມານ ==
ສົມເດັດພະບໍຣົມໂອຣະສາທິລາດ ສະຫຍາມລາຊະກຸມານ ຈົນຮອດປັດຈຸບັນມີທັງໝົດ 3 ພະອົງ ໄດ້ແກ່
{|class="wikitable"
|-
! ພະບໍລົມສາຍາລັກ || ສະຫຍາມມຸງກຸດລາຊະກຸມານ || ຄວາມພັນກັບພະມະຫາກະສັດ || ສະຖາປະນາ || ສິ້ນສຸດຕຳແໜ່ງ
!ຂູ່ສມຣສ
|-
| align = "center"| [[ຮູບ:Maha Vajirunhis.jpg|100px]]
| align = "center"| [[ສົມເດັດພະບໍຣົມໂອຣະສາທິລາດ ເຈົ້າຟ້າວະຊິຣຸນຫິດ ສະຫຍາມມຸງກຸດລາຊະກຸມານ|ສົມເດັດພະບໍຣົມໂອຣະສາທິລາດ ເຈົ້າຟ້າມະຫາວະຊິຣຸນຫິດ<br>ສະຫຍາມມຸງກຸດລາຊະກຸມານ]] [[ຮູບ:Emblem of Vajirunhis (simplified).svg|100px]]
| align = "center"| ພະລາຊະໂອລົດ (ຊັ້ນເຈົ້າຟ້າ) ພະອົງໃຫຍ່<br>ໃນ[[ພະບາດສົມເດັດພະຈຸລະຈອມເກົ້າເຈົ້າຢູ່ຫົວ]]<br> ປະສູດແຕ່<br>[[ສົມເດັດພະສີສະວະຣິນທິຣາບໍຣົມລາຊະເທວີ ພະພັນວັດສາໄອຍິກາເຈົ້າ|ສົມເດັດພະນາງເຈົ້າສະຫວ່າງວັດທະນາ ພະບໍຣົມລາຊະເທວີ]]
| align = "center"| [[14 ມັງກອນ]] [[ຄ.ສ. 1886]] <ref name="เจ้าฟ้ามหาวชิรุณหิศ">[[ราชกิจจานุเบกษา]], [http://www.ratchakitcha.soc.go.th/DATA/PDF/2429/044/368.PDF ประกาศเฉลิมพระปรมาภิไธย สถาปนาสมเด็จพระเจ้าลูกเธอ เจ้าฟ้าราชกุมารพระองค์ใหญ่ เป็น สมเด็จพระบรมโอรสาธิราช เจ้าฟ้ามหาวชิรุณหิศ] {{Webarchive|url=https://web.archive.org/web/20120609234211/http://www.ratchakitcha.soc.go.th/DATA/PDF/2429/044/368.PDF |date=2012-06-09 }}, เล่ม ๓, ตอน ๔๔, วันที่ ๑ มีนาคม พ.ศ. ๒๔๒๙, หน้า ๓๖๘</ref>
| align = "center"| ສະຫວັນຄົດ<br>([[4 ມັງກອນ]] [[ຄ.ສ. 1894]])
|ໄມ່ປາກດ
(ພ.ສ. 2429 - 2437)
|-
| align = "center"| [[ຮູບ:King Vajiravudh (Rama VI) of Siam.jpg|100px]]
| align = "center"| [[ພະບາດສົມເດັດພະມຸງກຸດເກົ້າເຈົ້າຢູ່ຫົວ|ສົມເດັດພະບໍຣົມໂອຣະສາທິລາດ ເຈົ້າຟ້າມະຫາວະຊິຣາວຸດ<br>ສະຫຍາມມຸງກຸດລາຊະກຸມານ]] [[ຮູບ:Royal Monogram of Vajiravudh - วปร6.svg|100px]]
| align = "center"| ພະລາຊະໂອລົດ (ຊັ້ນເຈົ້າຟ້າ) ພະອົງຮອງ<br>ໃນ[[ພະບາດສົມເດັດພະຈຸລະຈອມເກົ້າເຈົ້າຢູ່ຫົວ]] <br>ປະສູດແຕ່<br>[[ສົມເດັດພະສີພັດຊະຣິນທາບໍຣົມລາຊິນີນາດ ພະບໍຣົມລາຊະຊົນນະນີພັນປີຫຼວງ|ສົມເດັດພະນາງເຈົ້າເສົາວະພາຜ່ອງສີ ພະບໍຣົມລາຊິນີນາດ]]
| align = "center"| [[4 ມັງກອນ]] [[ຄ.ສ. 1894]]<ref>ราชกิจจานุเบกษา,[http://www.ratchakitcha.soc.go.th/DATA/PDF/2437/043/346.PDF ประกาศสถาปนา สมเด็จพระบรมโอรสาธิราช เจ้าฟ้ามหาวชิราวุธสยามมกุฎราชกุมาร] {{Webarchive|url=https://web.archive.org/web/20111110192653/http://www.ratchakitcha.soc.go.th/DATA/PDF/2437/043/346.PDF |date=2011-11-10 }}, เล่ม ๑๑, ตอน ๔๓, ๒๐ มกราคม พ.ศ. ๒๔๓๗, หน้า ๓๔๖</ref>
| align = "center"| ຂຶ້ນຄອງລາດ<br>([[23 ຕຸລາ]] [[ຄ.ສ. 1910]])
|[[ຮູບ:Lashamilavan.jpg|100px]] [[ລັກສະມີລາວັນ]]
(ພ.ສ. 2444 - 2453)
----[[ຮູບ:HM Queen Indrasakdi Sachi.jpg|100px]]
[[ປະໄພ ສຸຈະລິດກຸນ]]
(ພ.ສ. 2447 - 2453)
----[[ຮູບ:ตราประจำพระองค์พระนางเจ้าสุวัทนา พระวรราชเทวี.jpg|100px]]
[[ສຸວັທນາ]]
(ພ.ສ. 2450 - 2453)
|-
| align = "center"| [[ຮູບ:HRH Vajiralongkorn (Cropped).jpg|100px]]
| align = "center"| [[ສົມເດັດພຣະບໍຣົມໂອຣະສາທິລາດ ເຈົ້າຟ້າມະຫາວະຊິຣາລົງກອນ|ສົມເດັດພະບໍຣົມໂອຣະສາທິລາດ ເຈົ້າຟ້າມະຫາວະຊິຣາລົງກອນ<br>ສະຫຍາມມຸງກຸດລາຊະກຸມານ]] [[ຮູບ:Royal monogram of Vajiralongkorn as crown prince (daimond shape).jpg|100px]] [[ຮູບ:Royal Badge of Maha Vajiralongkorn, Crown Prince of Thailand (1972-1998).png|100px]] [[ຮູບ:Royal Monogram of Crown Prince Maha Vajiralongkorn.svg|100px]]
| align = "center"| ພະລາຊະໂອລົດ<br>ໃນ[[ພະບາດສົມເດັດພະປໍຣະມິນມະຫາພູມິພົນອະດຸນຍະເດດ|ພະບາດສົມເດັດພະເຈົ້າຢູ່ຫົວພູມິພົນອະດຸນຍະເດດ]]<br>ປະສູດແຕ່<br>[[ສົມເດັດພະນາງເຈົ້າສິຣິກິດ ພະບໍຣົມລາຊິນີນາດ]]
| align = "center"| [[28 ທັນວາ]] [[ຄ.ສ. 1972]]<ref>ราชกิจจานุเบกษา, [http://www.ratchakitcha.soc.go.th/DATA/PDF/2515/A/200/1.PDF พระบรมราชโองการ ประกาศ สถาปนาสมเด็จพระบรมโอรสาธิราช สยามมกุฎราชกุมาร] {{Webarchive|url=https://web.archive.org/web/20090824020733/http://www.ratchakitcha.soc.go.th/DATA/PDF/2515/A/200/1.PDF |date=2009-08-24 }}, เล่ม ๘๙, ตอน ๒๐๐ ก, ฉบับพิเศษ, ๒๘ ธันวาคม พ.ศ. ๒๕๑๕, หน้า ๑</ref>
| align = "center"| ຂຶ້ນຄອງລາດ<br>([[13 ຕຸລາ]] [[ຄ.ສ. 2016]])
|[[ຮູບ:Royal monogram of Suthida.svg|100px]] [[ຮູບ:Queen Suthida of Thailand in 2019 (2, cropped).jpg|100px]]
[[ສຸທິດາ ຕິດໃຈ]]
(ພ.ສ. 2523 - 2553)
----[[ສຸທິດາ ວະຂິຣາລງກອນ]]
(ພ.ສ. 2553 - 2559)
|}
== ອ້າງອີງ ==
<references/>
1.พระองค์ใหญ่ เป็น สมเด็จพระบรมโอรสาธิราช เจ้าฟ้ามหาวชิรุณหิศ, เล่ม ๓, ตอน ๔๔, วันที่ ๑ มีนาคม พ.ศ. ๒๔๒๙, หน้า ๓๖๘
2. พระราชพิธีสถาปนา เฉลิมพระนามาภิไธย สมเด็จพระบรมโอรสาธิราช สยามมกุฎราชกุมาร
3. พระราชบัญญัติธง รัตนโกสินทร์ ศก ๑๑๖
4. พระราชบัญญัติธง รัตนโกสินทร์ ศก ๑๒๙
5. ราชกิจจานุเบกษา, พระราชบัญญัติธง พ.ศ. ๒๕๒๒, เล่ม ๙๖, ตอน ๑๑ ก ฉบับพิเศษ, ๓๐ เมษายน พ.ศ. ๒๕๒๒, หน้า ๑
6.ภาพเครื่องประกอบพระราชอิสริยยศสมเด็จพระบรมโอรสาธิราชฯ สยามมกุฎราชกุมาร
7.ราชกิจจานุเบกษา,ประกาศสถาปนา สมเด็จพระบรมโอรสาธิราช เจ้าฟ้ามหาวชิราวุธสยามมกุฎราชกุมาร, เล่ม ๑๑, ตอน ๔๓, ๒๐ มกราคม พ.ศ. ๒๔๓๗, หน้า ๓๔๖
8. ราชกิจจานุเบกษา, พระบรมราชโองการ ประกาศ สถาปนาสมเด็จพระบรมโอรสาธิราช สยามมกุฎราชกุมาร, เล่ม ๘๙, ตอน ๒๐๐ ก, ฉบับพิเศษ, ๒๘ ธันวาคม พ.ศ. ๒๕๑๕, หน้า ๑
0dxdqwib94hvpvypfihux47k01ieuvg
Module:Check for unknown parameters
828
15316
129403
100392
2026-07-29T09:45:05Z
Khomphoi28
15846
129403
Scribunto
text/plain
-- This module may be used to compare the arguments passed to the parent
-- with a list of arguments, returning a specified result if an argument is
-- not on the list
require ('strict');
local p = {}
local mapframe_params = {
'coord',
'coordinates',
'id',
'qid',
'mapframe',
'mapframe-area_km2',
'mapframe-area_mi2',
'mapframe-caption',
'mapframe-coord',
'mapframe-coordinates',
'mapframe-custom',
'mapframe-frame-coord',
'mapframe-frame-coordinates',
'mapframe-frame-height',
'mapframe-frame-width',
'mapframe-geomask',
'mapframe-geomask-fill',
'mapframe-geomask-fill-opacity',
'mapframe-geomask-stroke-color',
'mapframe-geomask-stroke-colour',
'mapframe-geomask-stroke-width',
'mapframe-height',
'mapframe-id',
'mapframe-length_km',
'mapframe-length_mi',
'mapframe-line',
'mapframe-line-stroke-color',
'mapframe-line-stroke-colour',
'mapframe-marker',
'mapframe-marker-color',
'mapframe-marker-colour',
'mapframe-point',
'mapframe-population',
'mapframe-shape',
'mapframe-shape-fill',
'mapframe-shape-fill-opacity',
'mapframe-shape-stroke-color',
'mapframe-shape-stroke-colour',
'mapframe-stroke-color',
'mapframe-stroke-colour',
'mapframe-stroke-width',
'mapframe-switcher',
'mapframe-type',
'mapframe-width',
'mapframe-wikidata',
'mapframe-zoom'
}
local function trim(s)
return s:match('^%s*(.-)%s*$')
end
local function isnotempty(s)
return s and s:match('%S')
end
local function clean(text)
-- Return text cleaned for display and truncated if too long.
-- Strip markers are replaced with dummy text representing the original wikitext.
local pos, truncated
local function truncate(text)
if truncated then
return ''
end
if mw.ustring.len(text) > 25 then
truncated = true
text = mw.ustring.sub(text, 1, 25) .. '...'
end
return mw.text.nowiki(text)
end
local parts = {}
for before, tag, remainder in text:gmatch('([^\127]*)\127[^\127]*%-(%l+)%-[^\127]*\127()') do
pos = remainder
table.insert(parts, truncate(before) .. '<' .. tag .. '>...</' .. tag .. '>')
end
table.insert(parts, truncate(text:sub(pos or 1)))
return table.concat(parts)
end
function p._check(args, pargs)
if type(args) ~= "table" or type(pargs) ~= "table" then
-- TODO: error handling
return
end
-- create the list of known args, regular expressions, and the return string
local knownargs = {}
if isnotempty(args['mapframe_args']) then
for _, v in ipairs(mapframe_params) do
knownargs[v] = 1
end
end
local regexps = {}
for k, v in pairs(args) do
if type(k) == 'number' then
v = trim(v)
knownargs[v] = 1
elseif k:find('^regexp[1-9][0-9]*$') then
table.insert(regexps, '^' .. v .. '$')
end
end
-- loop over the parent args, and make sure they are on the list
local ignoreblank = isnotempty(args['ignoreblank'])
local showblankpos = isnotempty(args['showblankpositional'])
local values = {}
for k, v in pairs(pargs) do
if type(k) == 'string' and knownargs[k] == nil then
local knownflag = false
for _, regexp in ipairs(regexps) do
if mw.ustring.match(k, regexp) then
knownflag = true
break
end
end
if not knownflag and ( not ignoreblank or isnotempty(v) ) then
table.insert(values, clean(k))
end
elseif type(k) == 'number' and knownargs[tostring(k)] == nil then
local knownflag = false
for _, regexp in ipairs(regexps) do
if mw.ustring.match(tostring(k), regexp) then
knownflag = true
break
end
end
if not knownflag and ( showblankpos or isnotempty(v) ) then
table.insert(values, k .. ' = ' .. clean(v))
end
end
end
-- add results to the output tables
local res = {}
if #values > 0 then
local unknown_text = args['unknown'] or 'Found _VALUE_, '
if mw.getCurrentFrame():preprocess( "{{REVISIONID}}" ) == "" then
local preview_text = args['preview']
if isnotempty(preview_text) then
preview_text = require('Module:If preview')._warning({preview_text})
elseif preview_text == nil then
preview_text = unknown_text
end
unknown_text = preview_text
end
for _, v in pairs(values) do
-- Fix odd bug for | = which gets stripped to the empty string and
-- breaks category links
if v == '' then v = ' ' end
-- avoid error with v = 'example%2' ("invalid capture index")
local r = unknown_text:gsub('_VALUE_', {_VALUE_ = v})
table.insert(res, r)
end
end
return table.concat(res)
end
function p.check(frame)
local args = frame.args
local pargs = frame:getParent().args
return p._check(args, pargs)
end
return p
mf5u017ry3j5wcsi9ctzrqfash3oih5
Module:Infobox
828
17265
129408
128907
2026-07-29T10:04:04Z
Khomphoi28
15846
129408
Scribunto
text/plain
local p = {}
local args = {}
local origArgs = {}
local root
local empty_row_categories = {}
local category_in_empty_row_pattern = '%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:[^]]*]]'
local has_rows = false
local yesno = require("Module:Yesno")
local lists = {
plainlist_t = {
patterns = {
'^plainlist$',
'%splainlist$',
'^plainlist%s',
'%splainlist%s'
},
found = false,
styles = 'Plainlist/styles.css'
},
hlist_t = {
patterns = {
'^hlist$',
'%shlist$',
'^hlist%s',
'%shlist%s'
},
found = false,
styles = 'Hlist/styles.css'
}
}
local function has_list_class(args_to_check)
for _, list in pairs(lists) do
if not list.found then
for _, arg in pairs(args_to_check) do
for _, pattern in ipairs(list.patterns) do
if mw.ustring.find(arg or '', pattern) then
list.found = true
break
end
end
if list.found then break end
end
end
end
end
local function fixChildBoxes(sval, tt)
local function notempty( s ) return s and s:match( '%S' ) end
if notempty(sval) then
local marker = '<span class=special_infobox_marker>'
local s = sval
-- start moving templatestyles and categories inside of table rows
local slast = ''
while slast ~= s do
slast = s
s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>%s*)(%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:[^]]*%]%])', '%2%1')
s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>%s*)(%[%[%s*หมวดหมู่%s*:[^]]*%]%])', '%2%1')
s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>%s*)(\127[^\127]*UNIQ%-%-templatestyles%-%x+%-QINU[^\127]*\127)', '%2%1')
end
-- end moving templatestyles and categories inside of table rows
s = mw.ustring.gsub(s, '(<%s*[Tt][Rr])', marker .. '%1')
s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>)', '%1' .. marker)
if s:match(marker) then
s = mw.ustring.gsub(s, marker .. '%s*' .. marker, '')
s = mw.ustring.gsub(s, '([\r\n]|-[^\r\n]*[\r\n])%s*' .. marker, '%1')
s = mw.ustring.gsub(s, marker .. '%s*([\r\n]|-)', '%1')
s = mw.ustring.gsub(s, '(</[Cc][Aa][Pp][Tt][Ii][Oo][Nn]%s*>%s*)' .. marker, '%1')
s = mw.ustring.gsub(s, '(<%s*[Tt][Aa][Bb][Ll][Ee][^<>]*>%s*)' .. marker, '%1')
s = mw.ustring.gsub(s, '^(%{|[^\r\n]*[\r\n]%s*)' .. marker, '%1')
s = mw.ustring.gsub(s, '([\r\n]%{|[^\r\n]*[\r\n]%s*)' .. marker, '%1')
s = mw.ustring.gsub(s, marker .. '(%s*</[Tt][Aa][Bb][Ll][Ee]%s*>)', '%1')
s = mw.ustring.gsub(s, marker .. '(%s*\n|%})', '%1')
end
if s:match(marker) then
local subcells = mw.text.split(s, marker)
s = ''
for k = 1, #subcells do
if k == 1 then
s = s .. subcells[k] .. '</' .. tt .. '></tr>'
elseif k == #subcells then
local rowstyle = ' style="display:none"'
if notempty(subcells[k]) then rowstyle = '' end
s = s .. '<tr' .. rowstyle ..'><' .. tt .. ' colspan=2>\n' ..
subcells[k]
elseif notempty(subcells[k]) then
if (k % 2) == 0 then
s = s .. subcells[k]
else
s = s .. '<tr><' .. tt .. ' colspan=2>\n' ..
subcells[k] .. '</' .. tt .. '></tr>'
end
end
end
end
-- the next two lines add a newline at the end of lists for the PHP parser
-- [[Special:Diff/849054481]]
-- remove when [[:phab:T191516]] is fixed or OBE
s = mw.ustring.gsub(s, '([\r\n][%*#;:][^\r\n]*)$', '%1\n')
s = mw.ustring.gsub(s, '^([%*#;:][^\r\n]*)$', '%1\n')
s = mw.ustring.gsub(s, '^([%*#;:])', '\n%1')
s = mw.ustring.gsub(s, '^(%{%|)', '\n%1')
return s
else
return sval
end
end
-- Cleans empty tables
local function cleanInfobox()
root = tostring(root)
if has_rows == false then
root = mw.ustring.gsub(root, '<table[^<>]*>%s*</table>', '')
end
end
-- Returns the union of the values of two tables, as a sequence.
local function union(t1, t2)
local vals = {}
for k, v in pairs(t1) do
vals[v] = true
end
for k, v in pairs(t2) do
vals[v] = true
end
local ret = {}
for k, v in pairs(vals) do
table.insert(ret, k)
end
return ret
end
-- Returns a table containing the numbers of the arguments that exist
-- for the specified prefix. For example, if the prefix was 'data', and
-- 'data1', 'data2', and 'data5' exist, it would return {1, 2, 5}.
local function getArgNums(prefix)
local nums = {}
for k, v in pairs(args) do
local num = tostring(k):match('^' .. prefix .. '([1-9]%d*)$')
if num then table.insert(nums, tonumber(num)) end
end
table.sort(nums)
return nums
end
-- Adds a row to the infobox, with either a header cell
-- or a label/data cell combination.
local function addRow(rowArgs)
if rowArgs.header and rowArgs.header ~= '_BLANK_' then
has_rows = true
has_list_class({ rowArgs.rowclass, rowArgs.class, args.headerclass })
root
:tag('tr')
:addClass(rowArgs.rowclass)
:cssText(rowArgs.rowstyle)
:tag('th')
:attr('colspan', '2')
:addClass('infobox-header')
:addClass(rowArgs.class)
:addClass(args.headerclass)
-- @deprecated next; target .infobox-<name> .infobox-header
:cssText(args.headerstyle)
:cssText(rowArgs.rowcellstyle)
:wikitext(fixChildBoxes(rowArgs.header, 'th'))
if rowArgs.data and not yesno(args.decat) then
root:wikitext(
'[[หมวดหมู่:หน้าที่ใช้แม่แบบกล่องข้อมูลที่มีเซลล์ข้อมูลถูกละเลย]]'
)
end
elseif rowArgs.data and rowArgs.data:gsub(category_in_empty_row_pattern, ''):match('^%S') then
has_rows = true
has_list_class({ rowArgs.rowclass, rowArgs.class })
local row = root:tag('tr')
row:addClass(rowArgs.rowclass)
row:cssText(rowArgs.rowstyle)
if rowArgs.label then
row
:tag('th')
:attr('scope', 'row')
:addClass('infobox-label')
-- @deprecated next; target .infobox-<name> .infobox-label
:cssText(args.labelstyle)
:cssText(rowArgs.rowcellstyle)
:wikitext(rowArgs.label)
:done()
end
local dataCell = row:tag('td')
dataCell
:attr('colspan', not rowArgs.label and '2' or nil)
:addClass(not rowArgs.label and 'infobox-full-data' or 'infobox-data')
:addClass(rowArgs.class)
-- @deprecated next; target .infobox-<name> .infobox(-full)-data
:cssText(rowArgs.datastyle)
:cssText(rowArgs.rowcellstyle)
:wikitext(fixChildBoxes(rowArgs.data, 'td'))
else
table.insert(empty_row_categories, rowArgs.data or '')
end
end
local function renderTitle()
if not args.title then return end
has_rows = true
has_list_class({args.titleclass})
root
:tag('caption')
:addClass('infobox-title')
:addClass(args.titleclass)
-- @deprecated next; target .infobox-<name> .infobox-title
:cssText(args.titlestyle)
:wikitext(args.title)
end
local function renderAboveRow()
if not args.above then return end
has_rows = true
has_list_class({ args.aboveclass })
root
:tag('tr')
:tag('th')
:attr('colspan', '2')
:addClass('infobox-above')
:addClass(args.aboveclass)
-- @deprecated next; target .infobox-<name> .infobox-above
:cssText(args.abovestyle)
:wikitext(fixChildBoxes(args.above,'th'))
end
local function renderBelowRow()
if not args.below then return end
has_rows = true
has_list_class({ args.belowclass })
root
:tag('tr')
:tag('td')
:attr('colspan', '2')
:addClass('infobox-below')
:addClass(args.belowclass)
-- @deprecated next; target .infobox-<name> .infobox-below
:cssText(args.belowstyle)
:wikitext(fixChildBoxes(args.below,'td'))
end
local function addSubheaderRow(subheaderArgs)
if subheaderArgs.data and
subheaderArgs.data:gsub(category_in_empty_row_pattern, ''):match('^%S') then
has_rows = true
has_list_class({ subheaderArgs.rowclass, subheaderArgs.class })
local row = root:tag('tr')
row:addClass(subheaderArgs.rowclass)
local dataCell = row:tag('td')
dataCell
:attr('colspan', '2')
:addClass('infobox-subheader')
:addClass(subheaderArgs.class)
:cssText(subheaderArgs.datastyle)
:cssText(subheaderArgs.rowcellstyle)
:wikitext(fixChildBoxes(subheaderArgs.data, 'td'))
else
table.insert(empty_row_categories, subheaderArgs.data or '')
end
end
local function renderSubheaders()
if args.subheader then
args.subheader1 = args.subheader
end
if args.subheaderrowclass then
args.subheaderrowclass1 = args.subheaderrowclass
end
local subheadernums = getArgNums('subheader')
for k, num in ipairs(subheadernums) do
addSubheaderRow({
data = args['subheader' .. tostring(num)],
-- @deprecated next; target .infobox-<name> .infobox-subheader
datastyle = args.subheaderstyle,
rowcellstyle = args['subheaderstyle' .. tostring(num)],
class = args.subheaderclass,
rowclass = args['subheaderrowclass' .. tostring(num)]
})
end
end
local function addImageRow(imageArgs)
if imageArgs.data and
imageArgs.data:gsub(category_in_empty_row_pattern, ''):match('^%S') then
has_rows = true
has_list_class({ imageArgs.rowclass, imageArgs.class })
local row = root:tag('tr')
row:addClass(imageArgs.rowclass)
local dataCell = row:tag('td')
dataCell
:attr('colspan', '2')
:addClass('infobox-image')
:addClass(imageArgs.class)
:cssText(imageArgs.datastyle)
:wikitext(fixChildBoxes(imageArgs.data, 'td'))
else
table.insert(empty_row_categories, imageArgs.data or '')
end
end
local function renderImages()
if args.image then
args.image1 = args.image
end
if args.caption then
args.caption1 = args.caption
end
local imagenums = getArgNums('image')
for k, num in ipairs(imagenums) do
local caption = args['caption' .. tostring(num)]
local data = mw.html.create():wikitext(args['image' .. tostring(num)])
if caption then
data
:tag('div')
:addClass('infobox-caption')
-- @deprecated next; target .infobox-<name> .infobox-caption
:cssText(args.captionstyle)
:wikitext(caption)
end
addImageRow({
data = tostring(data),
-- @deprecated next; target .infobox-<name> .infobox-image
datastyle = args.imagestyle,
class = args.imageclass,
rowclass = args['imagerowclass' .. tostring(num)]
})
end
end
-- When autoheaders are turned on, preprocesses the rows
local function preprocessRows()
if not args.autoheaders then return end
local rownums = union(getArgNums('header'), getArgNums('data'))
table.sort(rownums)
local lastheader
for k, num in ipairs(rownums) do
if args['header' .. tostring(num)] then
if lastheader then
args['header' .. tostring(lastheader)] = nil
end
lastheader = num
elseif args['data' .. tostring(num)] and
args['data' .. tostring(num)]:gsub(
category_in_empty_row_pattern, ''
):match('^%S') then
local data = args['data' .. tostring(num)]
if data:gsub(category_in_empty_row_pattern, ''):match('%S') then
lastheader = nil
end
end
end
if lastheader then
args['header' .. tostring(lastheader)] = nil
end
end
-- Gets the union of the header and data argument numbers,
-- and renders them all in order
local function renderRows()
local rownums = union(getArgNums('header'), getArgNums('data'))
table.sort(rownums)
for k, num in ipairs(rownums) do
addRow({
header = args['header' .. tostring(num)],
label = args['label' .. tostring(num)],
data = args['data' .. tostring(num)],
datastyle = args.datastyle,
class = args['class' .. tostring(num)],
rowclass = args['rowclass' .. tostring(num)],
-- @deprecated next; target .infobox-<name> rowclass
rowstyle = args['rowstyle' .. tostring(num)],
rowcellstyle = args['rowcellstyle' .. tostring(num)]
})
end
end
local function renderNavBar()
if not args.name then return end
has_rows = true
root
:tag('tr')
:tag('td')
:attr('colspan', '2')
:addClass('infobox-navbar')
:wikitext(require('Module:Navbar')._navbar{
args.name,
mini = 1,
})
end
local function renderItalicTitle()
local italicTitle = args['italic title'] and mw.ustring.lower(args['italic title'])
if italicTitle == '' or italicTitle == 'force' or italicTitle == 'yes' then
root:wikitext(require('Module:Italic title')._main({}))
end
end
-- Categories in otherwise empty rows are collected in empty_row_categories.
-- This function adds them to the module output. It is not affected by
-- args.decat because this module should not prevent module-external categories
-- from rendering.
local function renderEmptyRowCategories()
for _, s in ipairs(empty_row_categories) do
root:wikitext(s)
end
end
-- Render tracking categories. args.decat == turns off tracking categories.
local function renderTrackingCategories()
if yesno(args.decat) then return end
if args.child == 'yes' then
if args.title then
root:wikitext(
'[[หมวดหมู่:หน้าที่ใช้แม่แบบกล่องข้อมูลฝังตัวที่มีพารามิเตอร์ title]]'
)
end
elseif #(getArgNums('data')) == 0 and mw.title.getCurrentTitle().namespace == 0 then
root:wikitext('[[หมวดหมู่:บทความที่ใช้แม่แบบกล่องข้อมูลที่ไม่มีแถวข้อมูล]]')
end
end
--[=[
Loads the templatestyles for the infobox.
TODO: FINISH loading base templatestyles here rather than in
MediaWiki:Common.css. There are 4-5000 pages with 'raw' infobox tables.
See [[Mediawiki_talk:Common.css/to_do#Infobox]] and/or come help :).
When we do this we should clean up the inline CSS below too.
Will have to do some bizarre conversion category like with sidebar.
]=]
local function loadTemplateStyles()
local frame = mw.getCurrentFrame()
local hlist_templatestyles = ''
if lists.hlist_t.found then
hlist_templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = lists.hlist_t.styles }
}
end
local plainlist_templatestyles = ''
if lists.plainlist_t.found then
plainlist_templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = lists.plainlist_t.styles }
}
end
-- See function description
local base_templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = 'Module:Infobox/styles.css' }
}
local templatestyles = ''
if args['templatestyles'] then
templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = args['templatestyles'] }
}
end
local child_templatestyles = ''
if args['child templatestyles'] then
child_templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = args['child templatestyles'] }
}
end
local grandchild_templatestyles = ''
if args['grandchild templatestyles'] then
grandchild_templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = args['grandchild templatestyles'] }
}
end
return table.concat({
-- hlist -> plainlist -> base is best-effort to preserve old Common.css ordering.
-- this ordering is not a guarantee because the rows of interest invoking
-- each class may not be on a specific page
hlist_templatestyles,
plainlist_templatestyles,
base_templatestyles,
templatestyles,
child_templatestyles,
grandchild_templatestyles
})
end
-- common functions between the child and non child cases
local function structure_infobox_common()
renderSubheaders()
renderImages()
preprocessRows()
renderRows()
renderBelowRow()
renderNavBar()
renderItalicTitle()
renderEmptyRowCategories()
renderTrackingCategories()
cleanInfobox()
end
-- Specify the overall layout of the infobox, with special settings if the
-- infobox is used as a 'child' inside another infobox.
local function _infobox()
if args.child ~= 'yes' then
root = mw.html.create('table')
root
:addClass(args.subbox == 'yes' and 'infobox-subbox' or 'infobox')
:addClass(args.bodyclass)
-- @deprecated next; target .infobox-<name>
:cssText(args.bodystyle)
has_list_class({ args.bodyclass })
renderTitle()
renderAboveRow()
else
root = mw.html.create()
root
:wikitext(args.title)
end
structure_infobox_common()
return loadTemplateStyles() .. root
end
-- If the argument exists and isn't blank, add it to the argument table.
-- Blank arguments are treated as nil to match the behaviour of ParserFunctions.
local function preprocessSingleArg(argName)
if origArgs[argName] and origArgs[argName] ~= '' then
args[argName] = origArgs[argName]
end
end
-- Assign the parameters with the given prefixes to the args table, in order, in
-- batches of the step size specified. This is to prevent references etc. from
-- appearing in the wrong order. The prefixTable should be an array containing
-- tables, each of which has two possible fields, a "prefix" string and a
-- "depend" table. The function always parses parameters containing the "prefix"
-- string, but only parses parameters in the "depend" table if the prefix
-- parameter is present and non-blank.
local function preprocessArgs(prefixTable, step)
if type(prefixTable) ~= 'table' then
error("Non-table value detected for the prefix table", 2)
end
if type(step) ~= 'number' then
error("Invalid step value detected", 2)
end
-- Get arguments without a number suffix, and check for bad input.
for i,v in ipairs(prefixTable) do
if type(v) ~= 'table' or type(v.prefix) ~= "string" or
(v.depend and type(v.depend) ~= 'table') then
error('Invalid input detected to preprocessArgs prefix table', 2)
end
preprocessSingleArg(v.prefix)
-- Only parse the depend parameter if the prefix parameter is present
-- and not blank.
if args[v.prefix] and v.depend then
for j, dependValue in ipairs(v.depend) do
if type(dependValue) ~= 'string' then
error('Invalid "depend" parameter value detected in preprocessArgs')
end
preprocessSingleArg(dependValue)
end
end
end
-- Get arguments with number suffixes.
local a = 1 -- Counter variable.
local moreArgumentsExist = true
while moreArgumentsExist == true do
moreArgumentsExist = false
for i = a, a + step - 1 do
for j,v in ipairs(prefixTable) do
local prefixArgName = v.prefix .. tostring(i)
if origArgs[prefixArgName] then
-- Do another loop if any arguments are found, even blank ones.
moreArgumentsExist = true
preprocessSingleArg(prefixArgName)
end
-- Process the depend table if the prefix argument is present
-- and not blank, or we are processing "prefix1" and "prefix" is
-- present and not blank, and if the depend table is present.
if v.depend and (args[prefixArgName] or (i == 1 and args[v.prefix])) then
for j,dependValue in ipairs(v.depend) do
local dependArgName = dependValue .. tostring(i)
preprocessSingleArg(dependArgName)
end
end
end
end
a = a + step
end
end
-- Parse the data parameters in the same order that the old {{infobox}} did, so
-- that references etc. will display in the expected places. Parameters that
-- depend on another parameter are only processed if that parameter is present,
-- to avoid phantom references appearing in article reference lists.
local function parseDataParameters()
preprocessSingleArg('autoheaders')
preprocessSingleArg('child')
preprocessSingleArg('bodyclass')
preprocessSingleArg('subbox')
preprocessSingleArg('bodystyle')
preprocessSingleArg('title')
preprocessSingleArg('titleclass')
preprocessSingleArg('titlestyle')
preprocessSingleArg('above')
preprocessSingleArg('aboveclass')
preprocessSingleArg('abovestyle')
preprocessArgs({
{prefix = 'subheader', depend = {'subheaderstyle', 'subheaderrowclass'}}
}, 10)
preprocessSingleArg('subheaderstyle')
preprocessSingleArg('subheaderclass')
preprocessArgs({
{prefix = 'image', depend = {'caption', 'imagerowclass'}}
}, 10)
preprocessSingleArg('captionstyle')
preprocessSingleArg('imagestyle')
preprocessSingleArg('imageclass')
preprocessArgs({
{prefix = 'header'},
{prefix = 'data', depend = {'label'}},
{prefix = 'rowclass'},
{prefix = 'rowstyle'},
{prefix = 'rowcellstyle'},
{prefix = 'class'}
}, 50)
preprocessSingleArg('headerclass')
preprocessSingleArg('headerstyle')
preprocessSingleArg('labelstyle')
preprocessSingleArg('datastyle')
preprocessSingleArg('below')
preprocessSingleArg('belowclass')
preprocessSingleArg('belowstyle')
preprocessSingleArg('name')
-- different behaviour for italics if blank or absent
args['italic title'] = origArgs['italic title']
preprocessSingleArg('decat')
preprocessSingleArg('templatestyles')
preprocessSingleArg('child templatestyles')
preprocessSingleArg('grandchild templatestyles')
end
-- If called via #invoke, use the args passed into the invoking template.
-- Otherwise, for testing purposes, assume args are being passed directly in.
function p.infobox(frame)
if frame == mw.getCurrentFrame() then
origArgs = frame:getParent().args
else
origArgs = frame
end
parseDataParameters()
return _infobox()
end
-- For calling via #invoke within a template
function p.infoboxTemplate(frame)
origArgs = {}
for k,v in pairs(frame.args) do origArgs[k] = mw.text.trim(v) end
parseDataParameters()
return _infobox()
end
return p
1dt7yb3ba8irroq84zc3vvf6k3gd2ve
ສະຕາບັກຊ໌
0
17807
129390
128042
2026-07-29T08:54:44Z
Khomphoi28
15846
/* ຈຳນວນສາຂາ */
129390
wikitext
text/x-wiki
{{ກ່ອງຂໍ້ມູນ ບໍລິສັດ
| name = ສະຕາບັກຊ໌ ຄໍເປີເຣຊັນ
| logo = Starbucks Corporation Logo 2011.png
| logo_size = 100px
| logo_alt =
| image = Starbuckscenter.jpg
| image_size = 200px
| image_caption = ສຳນັກງານໃຫຍ່ຂອງສະຕາບັກຊ໌ທີ່[[ສະຕາບັກຊ໌ເຊັນເຕີ]]ໃນ[[ຊີແອດເທີນ]]
| type = [[ບໍລິສັດ]]
| traded = {{NASDAQ|SBUX}}<br>[[NASDAQ-100]]<br />[[S&P 500]]
| genre =
| foundation = 31 ມີນາ ປີ1971<br>(51 ປີກ່ອນ)<br>[[ຕະຫຼາດໄພເພຣນສ໌]], [[ເອລລູອັອດເບ]], [[ຊີແອດເທີນ]],<br>{{Flag|ສະຫະລັດອາເມຣິກາ}}
| founder = [[ເຈີຣີ ບາລວິນ]], [[ເຊບ ຊີເກິລ]] ແລະ [[ກຣໍດອນ ໂບວເກີ]]
| location_city =
| location_country = 84 ປະເທດ
| location = [[ຊີແອດເທີນ]], [[ວໍຊິງຕັນ]]
| locations = 35,711
| area_served =
| key_people = [[ໂຮເວີດ ສລູດຊ໌]] ([[ປະທານບໍລິສັດ ແລະ ຜູ້ບໍລິຫານ]]) <br />ເຄວິນ ຈອນສັນ ([[ປະທານບໍລິສັດ ແລະ ຫົວໜ້າຝ່າຍປະຕິບັດການ]])
| industry = [[ຮ້ານກາເຟ]] <br />[[ກາເຟ]]
| products = ກາເຟ <br />ນໍ້າປັ່ນ <br />ຊາ <br />ເບເກີຣີ <br /> ແຊນວິດ<br />
| services = ກາເຟ
| revenue = {{increase}} 22.387 ຕື້ໂດລາສະຫະລັດ<ref name=SEC2017>[http://www.nasdaq.com/symbol/sbux/financials?query=income-statement "Starbucks financial report 2017"]. NASDAQ.</ref>
| operating_income = {{increase}} 4.135 ຕື້ໂດລາສະຫະລັດ<ref name=SEC2017/>
| net_income = {{increase}}2.885 ຕື້ໂດລາສະຫະລັດ
| assets = {{increase}} 14.366 ຕື້ໂດລາສະຫະລັດ<ref name=SEC2017/>
| equity = {{decrease}} 5.45 ຕື້ໂດລາສະຫະລັດ<ref name=SEC2017/>
| owner =
| num_employees = 238,000 ຄົນ<ref>{{cite news|url=http://www.forbes.com/companies/starbucks/|title=Starbucks|date=May 2013|website=forbes.com|accessdate =February 21, 2014}}</ref>
| num_stores =
| parent =
| divisions =
| subsid = ສະຕາບັກຊ໌ຄອບຟີ <br />[[Ethos Water|ເອທົສວໍເຕີ]] <br />[[Evolution Fresh|ອີໂວລູຊັນເຟຣຊ]] <br />[[Hear Music|ເຮຍຣ໌ມິວສິກ]] <br />[[La Boulange Bakery|ລາບູລັງເບເກີຣີ]] <br />[[Seattle's Best Coffee|ຊີແອດເທິລສ໌ເບສຕ໌ຄອບຟີ]]<br />[[Tazo|ທາໂຊ]]<br />[[Teavana|ທີວານາ]]<br />[[Torrefazione Italia|ຕໍເຣຟາຊິໂອເນ ອີຕາເລຍ]]
| slogan =
| homepage = [http://www.starbucks.com Starbucks.com]<br>
[http://www.starbucks.la Starbucks.la]
| footnotes =
| intl =
}}
'''ສະຕາບັກຊ໌''' ({{lang-en|Starbucks}}) ເປັນຮ້ານກາເຟຈາກອາເມຣິກາໃນ[[ຊີແອດເທີນ|ເມືອງຊີແອດເທີນ]]ໃນ[[ລັດວໍຊິງຕັນ]] ໃນປີ [[ຄ.ສ. 1971]] ໂດຍ ກຣໍດອນ ໂບວເກີ, ເຈີຣີ ບາລວິນ ແລະ ເຊບ ຊີເກິລ ໃນຊ່ວງຕອນເລີ່ມຕົ້ນ ໂລໂກ້ໄດ້ຖືກນໍາໃຊ້ເປັນໄຊເລັນ 2 ຫາງ ກໍ່ຕັ້ງໃນຖານະເປັນຮ້ານຂາຍຖົ່ວກາເຟຄົ້ວ ໃນປີ 1982 ສະຕາບັກຊ໌ມີສາຂາ 5 ສາຂາ ແລະ ໂຮເວີດ ສລູດສ໌ໄດ້ເຂົ້າຮ່ວມກິດຈະກໍານຳ ໂດຍການດູແລຂອງການຕະຫຼາດ ແລະ ການຂາຍຍ່ອຍ ເຊິ່ງພວກເຂົາໄດ້ແນະນຳໃຫ້ເປີດສະຕາບັກຊ໌ເປັນຮ້ານກາເຟ ແຕ່ຫຼາຍຄົນກໍບໍ່ເຊື່ອໃນວິໄສທັດຂອງລາວ ຕໍ່ມາສລູດສ໌ໄດ້ຂໍລາອອກຈາກບໍລິສັດ ໄປເປີດບາກາເຟຂອງຕົນເອງຊື່ ອິລ ຈີອໍຣ໌ເນລ ແລະ ຈຳໜ່າຍ[[ກາເຟ]]ຂອງສະຕາບັກຊ໌ ໃນປີ 1987 ສະຕາບັກຊ໌ປະເຊີນບັນຫາກັບຄວາມຫຍຸ້ງຍາກເນື່ອງຈາກບໍ່ສາມາດຄວບຄຸມຄຸນນະພາບຜະລິດຕະພັນໄດ້ ປີ ຄ.ສ 1988 ອິລ ຈີອໍຣ໌ເນລຈຶ່ງຊື້ທຸລະກິດຂາຍຍ່ອຍໄວ້ ແລະ ປ່ຽນຊື່ເປັນ ສະຕາບັກຊ໌ ຄໍເປີເຣຊັນ ແລະ ຈ້າງນັກບໍລິຫານມືອາຊີບເຂົ້າມາດູແລ ປີ 1992 ສະຕາບັກຊ໌ໄດ້ເຂົ້າ[[ຕະຫຼາດຫຸ້ນ]] ແລະ ໃນປີ 1996 ສະຕາບັກຊ໌ໄດ້ເປີດສາຂາທໍາອິດຢູ່ນອກ[[ທະວີບອາເມຣິກາເໜືອ|ອາເມຣິກາເໜືອ]]ທີ່[[ໂຕກຽວ]], [[ປະເທດຍີ່ປຸ່ນ]] ປັດຈຸບັນຫຼາຍກວ່າ 1 ໃນ 3 ຂອງຮ້ານສະຕາບັກຊ໌ທັງໝົດຢູ່ໃນຕ່າງປະເທດ<ref>{{cite web|url=http://www.starbucks.com/aboutus/Company_Profile.pdf|title=Company Profile|date=February 2008|publisher=Starbucks Coffee Company|accessdate=May 13, 2009|deadurl=yes|archiveurl=https://web.archive.org/web/20091015055833/http://www.starbucks.com/aboutus/Company_Profile.pdf|archivedate=October 15, 2009}}</ref> ໂດຍສະເລ່ຍແລ້ວສະຕາບັກຊ໌ໄດ້ເປີດສາຂາໃໝ່ເພີ່ມມື້ລະ 2 ສາຂາໃນລະຫວ່າງປີ 1987 ແລະ 2007<ref>{{cite web|url=http://www.bspcn.com/2007/12/10/5-things-you-didnt-know-starbucks/|archive-url=http://arquivo.pt/wayback/20090627152143/http://www.bspcn.com/2007/12/10/5-things-you-didnt-know-starbucks/|dead-url=yes|archive-date=June 27, 2009|title=5 Things You Didn't Know: Starbucks | The Best Article Every Day|publisher=Bspcn.com|date=December 10, 2007|accessdate=May 9, 2014}}</ref> ບໍລິສັດໄດ້ເລີ່ມ Caffe Starbucks ເປັນລະບົບການບໍລິການອອນລາຍໂດຍອີງໃສ່ເຄືອຂ່າຍຂອງ ເອໂອແອລ
ສັນຍະລັກຂອງສະຕາບັກຊ໌ຄັ້ງທຳອິດນັ້ນເປັນຮູບ[[ນາງເງືອກ]] ເຊິ່ງເປັນ ນາງເງືອກໄຊເຣນສອງຫາງ (Norse Siren) ໃນເທບນິຍາຍເພື່ອໃຫ້ນຶກເຖິງການຜະຈົນໄພຢູ່ໃນທ້ອງທະເລ ແລະ ດັດແກ້ຫຼາຍຄັ້ງ ແລະ ຫຼ້າສຸດແມ່ນໃນປີ ຄ.ສ. 2011 ໃນວາລະຂອງການສະເຫຼີມສະຫຼອງຄົບຮອບ 40 ປິຂອງການດຳເນີນທຸລະກິດ
ປັດຈຸບັນສະຕາບັກຊ໌ມີສາຂາຫຼາຍກວ່າ 27,984 ສາຂາທັງຢູ່ໃນສະຫະລັດອາເມຣິກາ ແລະ ໃນອີກ 73 ປະເທດ ໃນປີ ຄ.ສ. 2018 ແລະ ປະເທດລາວມີຈຳນວນທັງໝົດ 2 ສາຂາ<ref name="loxcel">{{cite web|title=Loxcel Starbucks Map|url=http://www.loxcel.com/sbux-faq.html|work=Starbucks|accessdate=April 17, 2018|date=April 17, 2018}}</ref> ອະດີດ[[ກຳມະການຜູ້ຈັດການ|ປະທານບໍລິຫານ]] ໂຮເວີດ ສລູດຊ໌ (Howard Schultz)ປະກາດລາອອກເມື່ອເດືອນເມສາ 2017 ຜູ້ດຳລົງຕຳແໜ່ງປະທານບໍລິຫານປັດຈຸບັນແມ່ນ ເຄວິນ ຈອນສັນ (Kevin Johnson)<ref>{{cite web|url=https://www.fastcompany.com/3066192/how-starbucks-can-guarantee-its-ceo-transition-succeeds|title=How Starbucks Can Guarantee Its CEO Transition Succeeds|date=April 3, 2017|publisher=Fast Company|accessdate=2017-04-11}}</ref>
== ປະຫວັດ ==
=== ກໍ່ຕັ້ງ ===
ສະຕາບັກຊ໌ສາຂາທຳອິດກໍ່ຕັ້ງຂຶ້ນໃນ[[ຊີແອດເທິລ]] [[ລັດວໍຊິງຕັນ]] ໃນວັນທີ 31 ມີນາ ປີ 1971<ref>Starbucks [https://www.starbucks.com/coffeehouse/store-design/1st-and-pike, "1st and Pike"] {{Webarchive|url=https://web.archive.org/web/20210419164935/https://www.starbucks.com/coffeehouse/store-design/1st-and-pike, |date=2021-04-19 }}, "Starbucks", 2016</ref> ໂດຍ 3 ຜູ້ກໍ່ຕັ້ງທີ່ໄດ້ຮູ້ຈັກກັນໃນສະໄໝຮຽນ[[ມະຫາວິທະຍາໄລຊານຟຣານຊິສໂກ]]<ref name="TimeOutSF">{{cite book|author=Time Out|title=Time Out Guide San Francisco|url=https://books.google.com/books?id=esY90CkrXbYC|accessdate=April 9, 2013|year=2011|publisher=Time Out Guides|isbn=978-1-84670-220-4}}</ref> ຄື ເຈີຣີ ບັລວິນ ເຊິ່ງພວກເຂົາເປັນອາຈານສອນພາສາອັງກິດ, ເຊບ ຊີ ເກິລ ອາຈານສອນປະຫວັດສາດ ແລະ ກຣໍດອນ ໂບວເກີ ນັກຂຽນ ໂດຍພວກເຂົາມີແຮງບັນດານໃຈໃນການຂາຍເມັດກາເຟທີ່ມີຄຸນນະພາບສູງ ແລະ ອຸປະກອນຄົ້ວກາເຟໂດຍ ອັນເຟຣດ ພີດທ໌ ຫຼັງຈາກທີ່ໄດ້ສອນພວກເຂົາກ່ຽວກັບການຄົ້ວເມັດກາເຟ<ref name=Pren2523>Pendergrast, pp. 252–53</ref> ບໍລິສັດໄດ້ນຳຊື່ຈາກປຶ້ມ[[ໂມບິດິກ]] ຄື ສະຕາບັກຊ໌ (Starbuck) ຫຼັງຈາກຄິດຄົ້ນມາຫຼາຍຊື່ເຊັ່ນ "ຄາຣ໌ໂກ້ ເຮົາສ໌" (Cargo House) ແລະ "ພີຄວດ" (Pequod)<ref>{{cite web|url=http://blog.seattlepi.com/thebigblog/2012/06/29/how-starbucks-got-its-name/|title=How Starbucks got its name - Seattle's Big Blog|work=[[Seattle Post-Intelligencer]]|accessdate=October 21, 2015|archive-date=2015-10-06|archive-url=https://web.archive.org/web/20151006211428/http://blog.seattlepi.com/thebigblog/2012/06/29/how-starbucks-got-its-name/|url-status=dead}}</ref> ໂບວເກີໄດ້ປຶກສາກັບເທີຣີ ເຮກເຣີ ເຊິ່ງພວກເຂົາກ່າວວ່າຕົວອັກສອນ "st" ນັ້ນເບິ່ງແຂງແຮງ ຜູ້ກໍ່ຕັ້ງໄດ້ມາຮ່ວມກັນຄິດຊື່ທີ່ຂຶ້ນຕົ້ນດ້ວຍ "st" ເຊິ່ງໄດ້ມີຄົນໜຶ່ງນຳແຜນທີ່ເໝືອງບໍ່ແຮ່ເກົ່າຂອງພູເຂົາແຄສເຄດ ແລະ ເຫັນຊື່ເມືອງໃນເໝືອງບໍ່ແຮ່ທີ່ຊື່ວ່າ "ສະຕາໂບ" (Starbo) ແລະ ໂບວເກີກໍໄດ້ຍົກຕົວລະຄອນ "ສະຕາບັກ" (Starbuck) ແລະ ກ່າວວ່າ ໂມບິດິກ ບໍ່ໄດ້ມີບົດເດັ່ນສຳລັບສະຕາບັກຊ໌ ແລະ ຊື່ຟັງເບິ່ງກົງກັບຄວາມຕ້ອງການຂອງເຮົາ<ref>{{cite news|url=http://seattletimes.com/html/businesstechnology/2004269831_bowker09.html|title=Starbucks co-founder talks about early days, launching Redhook and Seattle Weekly, too|publisher=Business and Technology|author=Melissa Allison|date=March 9, 2008}}</ref>
[[ຮູບ:Original Starbucks.jpg|thumb|ສະຕາບັກຊ໌ສະໂຕຣ໌ທີ່ 1912 ໄພເພຣຊ ເປັນສາຂາທີ 2 ຂອງອໍຣີຈີນອລສະຕາບັກຊ໌ ເຊິ່ງເຄີຍຢູ່ທີ 2000 ເສັ້ນທາງຕາເວັນຕົກ ຕັ້ງແຕ່ ປີ 1971 ຫາ ປີ 1976]]
ສະຕາບັກຊ໌ສະໂຕຣ໌ສາຂາທຳອິດຕັ້ງຂຶ້ນໃນຊີແອດເທິລ ທີ 2000 ເສັ້ນທາງຕາເວັນຕົກ ຕັ້ງແຕ່ ປີ 1971–1976 ແລະ ສາຂານີ້ໄດ້ຍ້າຍໄປຍັງ 1912 ໄພເພຣຊ ແລະ ບໍ່ໄດ້ມີການຍ້າຍອີກ<ref name="BrewerBrissenden2012">{{cite book|author1=Stephen Brewer|author2=Constance Brissenden|author3=Anita Carmin|title=DK Eyewitness Travel Guide: Pacific Northwest|url=https://books.google.com/books?id=_h-MvFHAMOIC&pg=PA135|accessdate=November 12, 2012|date=September 26, 2012|publisher=Dorling Kindersley|isbn=978-1-4053-7081-3|pages=135–}}</ref> ໃນຊ່ວງນັ້ນ ທາງບໍລິສັດໄດ້ຈຳໜ່າຍພຽງເມັດກາເຟຄົ້ວເທົ່ານັ້ນ ຍັງບໍ່ໄດ້ຈຳໜ່າຍກາເຟສຳເລັດຮູບ<ref name=usa1992>{{cite news|title=Coffee firm's plans to go national are percolating|author=Linda Dono Reeves|date=September 8, 1992|publisher=USA Today}}</ref> ເຊິ່ງກາເຟສຳເລັດຮູບທີ່ຢູ່ໃນຮ້ານເປັນພຽງແກ້ວທົດລອງເຊິ່ງແຈກຟຣີໃຫ້ກັບລູກຄ້າ ໂດຍປີທຳອິດພວກເຂົາໄດ້ຊື້ເມັດກາເຟຈາກພີດທ໌ ຫຼັງຈາກນັ້ນຈຶ່ງເລີ່ມຊື້ຈາກຊາວສວນໂດຍກົງ
=== ຂະຫຍາຍຕົວ ===
ໃນປີ 1984 ເຈົ້າຂອງບໍລິສັດສະຕາບັກຊ໌ ນຳໂດຍເຈີຣີ ບັລວິນ ໄດ້ທຳການຊື້ ພີດທ໌ສ<ref>"Starbucks Corporation." Student Resources. N.p., n.d. Web. March 13, 2013.</ref> ເຊິ່ງໃນຊ່ວງຍຸກ 80 ຍອດຂາຍຂອງກາເຟໃນສະຫະລັດອາເມລິກາຂ້ອນຂ້າງຊ້າ ແຕ່ຍອດຂາຍຂອງກາເຟຊະນິດພິເສດກັບເພີ່ມຂຶ້ນ 10% ຂອງຕະຫຼາດໃນປີ 1989 ທຽບກັບປີ 1983 ທີ່ 3%<ref name=wsj1989>{{cite news|title=Boom in Fancy Coffee Pits Big Marketers, Little Firms|author=Mark Robichaux|publisher=The Wall Street Journal|date=November 6, 1989}}</ref> ໃນປີ 1986 ບໍລິສັດໄດ້ເປີດຮ້ານແລ້ວເຖິງ 6 ສາຂາໃນຊີແອດເທິລ<ref name=wsj1989/>ໂດຍມີສາຂາໜຶ່ງເລີ່ມທົດລອງຂາຍກາເຟ[[ເອສເປຣສໂຊ]]<ref>{{cite news|title=Americans Wake Up and Smell the Coffee|author=Florence Fabricant|date=September 2, 1992|url=https://www.nytimes.com/1992/09/02/garden/americans-wake-up-and-smell-the-coffee.html|publisher=The New York Times}}</ref>
ຕໍ່ມາໃນປີ 1987 ຜູ້ບໍລິຫານໄດ້ຕັດສິນໃຈຂາຍສາຂາຂອງສະຕາບັກຊ໌ໃຫ້ກັບຜູ້ຈັດການສາຂາ<ref>{{cite web|url=https://news.starbucks.com/uploads/documents/AboutUs-Timeline-Q32015-8.6.2015.pdf |title=Archived copy |accessdate=2016-10-27 |deadurl=no |archiveurl=https://web.archive.org/web/20150906183546/https://news.starbucks.com/uploads/documents/AboutUs-Timeline-Q32015-8.6.2015.pdf |archivedate=September 6, 2015 |df=mdy }}</ref> ໂຮເວີດ ຊູລສ໌ ໄດ້ປັບປຸງຮ້ານກາເຟ ອິລຈີອອດນາເລຄອຟຟີ ຂອງເຂົາເປັນສະຕາບັກຊ໌ ແລະ ເລີ່ມຕົ້ນທີ່ຈະຂະຫຍາຍສາຂາອອກໄປ ຕໍ່ມາໃນປີດຽວກັນ ສະຕາບັກຊ໌ໄດ້ຂະຫຍາຍສາຂາໄປຍັງນອກຊີແອດເທິລສາຂາທຳອິດ ທີ່ສະຖານີວໍເຕີຟຣອນ ທີ່[[ແວນຄູເວີ]] ໃນ [[ລັດບຣິຕິຊ ໂຄລໍາເບຍ]] ແລະ [[ຊິຄາໂກ]] ໃນ[[ລັດອິລລີນອຍ]]<ref name=tele40/> ໃນປີ 1989 ໄດ້ມີຮ້ານເຖິງ 46 ສາຂາທັງໃນເຂດນໍຣທ໌ເວສ ແລະ ມິດເວສ ອີກທັງສາຕະບັກຊ໌ຍັງໄດ້ຂາຍກາເຟໄປເຖິງ 2,000,000 ປອນ (907,185 ກິໂລກຣາມ)
ແລະ ເຖິງເວລາທີ່ຈະເຮັດ[[ການສະເໜີຂາຍຫຸ້ນໃໝ່ແກ່ປະຊາຊົນທົ່ວໄປຄັ້ງທຳອິດ]] ໃນຕະຫຼາດຫຼັກຊັບໃນເດືອນມິຖຸນາ ປີ 1992 ເຊິ່ງໃນຂະນະນັ້ນມີຮ້ານເຖິງ 140 ສາຂາ ແລະ ລາຍໄດ້ 73.5 ລ້ານໂດລາສະຫະລັດ ເພີ່ມຂຶ້ນຈາກ 1.3 ລ້ານໂດລາສະຫະລັດໃນປີ 1987 ໂດຍບໍລິສັດມີມູນຄ່າທາງການຕະຫຼາດ 271 ລ້ານໂດລາສະຫະລັດໃນຕອນນັ້ນ ໂດຍຫຸ້ນ 12% ຂອງບໍລິສັດໄດ້ຖືກຂາຍ ແລະ ເພີ່ມຂຶ້ນໂດຍປະມານ 25 ລ້ານໂດລາສະຫະລັດ ເຊິ່ງເພີ່ມຕາມຮ້ານຄ້າ ທີ່ເພີ່ມຂຶ້ນສອງເທົ່າໃນສອງປີຖັດມາ<ref>{{cite news|title=Interest brews for Starbucks Coffee retailer makes stock offering amid latest java craze|publisher=The Globe and Mail|date=June 17, 1992}}</ref> ໃນເດືອນກັນຍາ ປີ 1992 ສະຕາບັກຊ໌ໄດ້ຮັບມູນຄ່າຫຼາຍຂຶ້ນ 70% ແລະ ມີກຳໄລຕໍ່ຫຸ້ນເພີ່ມຂຶ້ນຫຼາຍກວ່າ 100 ເທົ່າຈາກປີກ່ອນ<ref name=usa1992/>
ໃນເດືອນກໍລະກົດ ປີ 2013 ຫຼາຍກວ່າ 10% ຂອງການຊື້ສິນຄ້າໃນຮ້ານຈາກອຸປະກອນໂທລະສັບມືຖືໂດຍຜ່ານແອັບພິເຄຊັນສະຕາບັກຊ໌<ref>{{cite web|title=Mobile Payment At U.S. Starbucks Locations Crosses 10% As More Stores Get Wireless Charging|url=http://techcrunch.com/2013/07/26/mobile-payment-at-u-s-starbucks-locations-crosses-10-as-more-stores-get-wireless-charging/}}</ref> ໂດຍບໍລິສັດໄດ້ເຮັດໂປຣໂມຊັນ "ທະວີດອາຄອບຟີ" (Tweet-a-Coffee) ເພື່ອສົ່ງເສີມການຊື້ຜ່ານໂທລະສັບມືຖືໃນເດືອນຕຸລາ ປີ 2013 ໃນໂອກາດນີ້ ໂປຣໂມຊັນທີ່ໃຊ້[[ທະວິດເຕີ]] ເຊິ່ງລູກຄ້າມີໂອກາດທີ່ຈະໄດ້ຮັບບັດຂອງຂວັນມູນຄ່າ 5 ໂດລາ ສໍາລັບໝູ່ເພື່ອນຢູ່ໃນເມນຊັນ "@tweetacoffee" ແລະ ໝູ່ທີ່ແທັກໃນທະວິດ ໂດຍໄດ້ກວດສອບກ່ຽວກັບແຄມເປນນີ້ ໂດຍວັນທີ 6 ທັນວາ ປີ 2013 ໄດ້ລາຍງານວ່າ ມີ 27,000 ຄົນເຂົ້າຮ່ວມແຄມເປນນີ້ ແລະ ມີຍອດຂື້ເຖິງ 180,000 ໂດລາສະຫະລັດໃນວັນດຽວກັນ<ref>{{cite web|title=Starbucks’ @Tweetacoffee Campaign Generated $180,000 in Sales, HUGE Long-term Benefits |url=http://blog.keyhole.co/post/69080821142/starbucks-tweetacoffee-campaign-generated-180-000-in |work=Keyhole |publisher=Keyhole |accessdate=December 24, 2013 |author=Saif Ajani |date=December 5, 2013 |deadurl=yes |archiveurl=https://web.archive.org/web/20131215004220/http://blog.keyhole.co/post/69080821142/starbucks-tweetacoffee-campaign-generated-180-000-in |archivedate=December 15, 2013 }}</ref><ref>{{cite web|title=Starbucks 'Tweet-a-Coffee' Campaign Prompted $180,000 in Purchases|url=http://mashable.com/2013/12/05/starbuckss-tweet-a-coffee-180000/?utm_cid=mash-com-fb-main-link|work=Mashable|publisher=Mashable|accessdate=December 7, 2013|author=Todd Wasserman|date=December 6, 2013}}</ref>
=== ຕະຫຼາດໃໝ່ ===
ສາຂາທຳອິດຂອງສະຕາບັກຊ໌ທີ່ຕັ້ງຢູ່ນອກອາເມລິກາເໜືອຕັ້ງຢູ່ທີ່ [[ໂຕກຽວ]], [[ປະເທດຍີ່ປຸ່ນ]] ໃນປີ 1996<ref>{{cite news|last=Szabo|first=Liz|title=Launching Starbucks In Japan -- First Of 15 Stores To Open|url=http://community.seattletimes.nwsource.com/archive/?date=19960729&slug=2341589|publisher=The Seattle Times|accessdate=October 19, 2012|date=July 29, 1996|archive-date=ມັງກອນ 12, 2013|archive-url=https://web.archive.org/web/20130112211328/http://community.seattletimes.nwsource.com/archive/?date=19960729&slug=2341589|url-status=dead}}</ref> ຕໍ່ມາໄດ້ເຂົ້າເຮັດຕະຫຼາດໃນ[[ສະຫະລາຊະອານາຈັກ]] ໃນປີ 1998 ດ້ວຍ ມູນຄ່າ 83 ລ້ານໂດລາສະຫະລັດ<ref>{{Cite news |title=McDonalds Corp Betting That Coffee Is Britains Cup of Tea |url=https://www.nytimes.com/1999/03/28/world/mcdonald-s-corp-betting-that-coffee-is-britain-s-cup-of-tea.html |newspaper=[[The New York Times]] |date = March 1999|accessdate=August 6, 2009}}</ref> ດ້ວຍຮ້ານ 56 ສາຂາ ແລະ ປັບປຸງຮ້ານພາຍໃຕ້ຊື່ ສະຕາບັກຊ໌ ຕໍ່ມາໃນເດືອນກັນຍາ ປີ 2002 ສະຕາບັກຊ໌ໄດ້ເປີດສາຂາທຳອິດໃນ[[ອາເມຣິກາລາຕິນ]] ທີ່[[ເມັກຊິໂກຊີຕີ]] ເຊິ່ງໃນຂະນະນີ້ມີຫຼາຍກວ່າ 500 ສາຂາໃນ[[ປະເທດເມັກຊິກ]] ອີກທັງຍັງມີແຜນການຂະຫຍາຍເປັນ 850 ສາຂາໃນປີ 2018<ref>{{cite web|title=Starbucks sigue como prioridad para Alsea|url=http://www.eluniversal.com.mx/articulo/cartera/negocios/2016/03/29/starbucks-sigue-como-prioridad-para-alsea|work=El Universal|publisher=El Universal|accessdate=September 22, 2016|author=Miguel Ángel Pallares Gómez|date=March 29, 2016}}</ref>
ໃນປີ 1999 ສະຕາບັກຊ໌ໄດ້ທົດລອງຕະຫຼາດໃໝ່ດ້ວຍການເປີດຮ້ານອາຫານໃນຊານຟຣານຊິສໂກເບ ເຊິ່ງຮ້ານມີຊື່ວ່າ "ເຊີເຄເດຍ" (Circadia)<ref name="circadia">{{cite news|url=http://www.bizjournals.com/seattle/stories/1999/10/18/newscolumn3.html|title=Starbucks still seeking a rhythm for Circadia|last=Tice|first=Carol|date=October 15, 1999|work=Puget Sound Business Journal|accessdate=May 13, 2009}}</ref> ເຊິ່ງອະນາຄົດຈະມີການປ່ຽນເປັນສະຕາບັກຊ໌ ຄາເຟ່
ຕໍ່ມາໃນເດືອນຕຸລາ ປີ 2002 ສະຕາບັກຊ໌ໄດ້ກໍ່ຕັ້ງບໍລິສັດຄ້າຂາຍກາເຟໃນ[[ໂລຊານ]], [[ປະເທດສະວິດ]] ເພື່ອຊື້ເມັດກາເຟຂຽວ ເຊິ່ງທຸລະກິດອື່ນ ເຊັ່ນ ຮ້ານກາເຟ ຍັງຄົງຈັດການຈາກຊີແອດເທີນໂດຍກົງ<ref>{{cite news|url=http://www.bizjournals.com/seattle/stories/2002/10/14/daily35.html|title=Starbucks establishes coffee trading company in Switzerland|date=October 17, 2002|accessdate=November 12, 2012}}</ref>
ໃນເດືອນເມສາ ປີ 2003 ສະຕາບັກຊ໌ໄດ້ຊື້ ຊີແອດເທີນສ໌ເບສຄອບຟີ ແລະ ໂທເຣຟາຊີໂອເນ ອິຕາເລຍ ຈາກ ເອເອັບຊີເອັນເຕີໄພຣຊ໌ ດ້ວຍມູນຄ່າ 72 ລ້ານໂດລາສະຫະລັດ ເຊິ່ງເຮັດໃຫ້ມີຮ້ານສະຕາບັກຊ໌ເພີ່ມ 150 ສາຂາ ແຕ່ຕາມລາຍງານຂອງຊີແອດເທີນໂພສ-ອິນເທລິເຈນເຊີ ກ່າວວ່າເຮັດໃຫ້ທຸລະກິດຄ້າສົ່ງມີສັນຍານທີ່ດີຂຶ້ນ<ref>{{cite news|url=http://www.seattlepi.com/business/article/A-grande-deal-for-Starbucks-1112460.php|title=A grande deal for Starbucks|publisher=Seattle Post-Intelligencer|author=Christine Frey|date=April 16, 2003|accessdate=December 1, 2012}}</ref> ຕໍ່ມາໃນເດືອນກັນຍາ ປີ 2006 ດາຍດຣິສຄອບຟີ ໄດ້ຢືນຢັນທີ່ຈະຂາຍບໍລິສັດ ແລະ ຮ້ານຄ້າທັງໝົດໃຫ້ກັບສະຕາບັກຊ໌ ລວມທັງສາຂາຂອງຮ້ານຄອບຟີພີເພິລ ໃນ[[ລັດອໍຣີຈອນ]]ດ້ວຍ ເຮັດໃຫ້ຕໍ່ມາມີການປ່ຽນຮ້ານຄ້າທັງໝົດເປັນສະຕາບັກຊ໌ ຍົກເວັ້ນຮ້ານຄອບຟີພີເພິລ[[ສະໜາມບິນນານາຊາດພອດແລນ]]<ref>{{cite news|url=http://articles.latimes.com/2006/sep/15/business/fi-diedrich15|title=Diedrich to Sell Cafes to Rival|last=Hirsch|first=Jerry|date=September 15, 2006|work=Los Angeles Times|accessdate=May 13, 2009}}</ref>
ໃນເດືອນສິງຫາ ປີ 2003 ສະຕາບັກຊ໌ ໄດ້ເປີດສາຂາທໍາອິດໃນອາເມຣິກາໃຕ້ ຕັ້ງຢູ່ໃນ[[ລິມາ]], [[ປະເທດເປຣູ]]<ref>{{cite news|url=http://www.bizjournals.com/seattle/stories/2003/08/18/daily13.html|title=Starbucks enters South America through Peru|publisher=Puget Sound Business Journal|date=August 19, 2003}}</ref>
ໃນປິ 2007 ບໍລິສັດໄດ້ເປີດສາຂາທໍາອິດໃນ[[ປະເທດລັດເຊຍ]] ເຊິ່ງເປັນ 10 ປີຫຼັງຈາກໄດ້ຈົດທະບຽນການຄ້າທີ່ນີ້<ref name=Russia>{{cite news|url=https://www.nytimes.com/2007/09/07/business/worldbusiness/07sbux.html |title=After long dispute, a Russian Starbucks|last=Kramer|first=Andrew|date=September 7, 2007|work=The New York Times|accessdate=April 18, 2009}}</ref>
ຕໍ່ມາໃນເດືອນມີນາ ປີ 2008 ພວກເຂົາເຈົ້າໄດ້ຊື້ບໍລິສັດຜູ້ຜະລິດເຄື່ອງຄົ້ວກາເຟ ແລະ ທົດສອບການຜະລິດກາເຟສົດທີ່ຮ້ານສະຕາບັກຊ໌ໃນຊີແອດເທີນ, ຄາລິຟໍເນຍ, ນິວຢອກ ແລະ ບົດສະຕັນ<ref name=nytclover>{{cite news| url=https://www.nytimes.com/2008/03/26/dining/26starbucks.html |work=The New York Times | title=Tasting the Future of Starbucks Coffee From a New Machine | first=Oliver | last=Schwaner-Albright | date=March 26, 2008 | accessdate=April 1, 2010}}</ref>
[[ຮູບ:Starbucks stores graph.png|thumb|ກຣາຟສະແດງການເຕີບໂຕຂອງສະຕາບັກຊ໌ ປີ 1971 ຈົນເຖິງ ປີ 2011<ref name=tele40/>]]
ຕົ້ນປີ 2008 ສະຕາບັກຊ໌ໄດ້ເປີດເວັບໄຊຄອມມູນິຕີ "ມາຍສະຕາບັກຊ໌ໄອເດຍ" ເພື່ອເກັບຂໍ້ສົງໄສ ແລະ ຄວາມຄິດເຫັນຈາກລູກຄ້າ ເຊິ່ງຜູ້ໃຊ້ສາມາດສະແດງຄວາມຄິດເຫັນ ແລະ ໂຫວດໄດ້ເຊິ່ງໃຫ້ບໍລິການ ເຊລຟຣົຊດັອດຄອມ<ref>{{cite news|url=https://www.theguardian.com/technology/2008/mar/24/netbytes.starbucks|title=Starbucks lets customers have their say|last=Schofield|first=Jack|date=March 24, 2008|work=The Guardian|accessdate=March 18, 2009 | location=London}}</ref>
ໃນເດືອນພຶດສະພາ ປີ 2008 ໄດ້ມີການເປີດຕົວບັດສະຕາບັກຊ໌ (ປ່ຽນຈາກບັດຂອງຂວັນ) ເຊິ່ງນຳສະເໜີການໃຊ້[[ວາຍຟາຍ]]ຟຣີພາຍໃນຮ້ານ, ການບໍ່ຄິດຄ່າຖົ່ວນົມເຫຼືອງ ແລະ ໄຊຣັບ ລວມໄປເຖິງກາເຟ, ກາເຟເຢັນ ແລະ ຊາ ສາມາດເຕີມຟຣີໄດ້<ref>{{cite web|url=http://www.starbucks.com/card/rewards |title=Card Rewards |publisher=Starbucks.com |accessdate=October 24, 2010}}</ref> ຕໍ່ມາໃນປີ 2009 ສະຕາບັກຊ໌ໄດ້ເລີ່ມທົດສອບແອັບພິເຄຊັນເທິງມືຖືຂອງບັດສະຕາບັກຊ໌ ເຊິ່ງຈະເກັບມູນຄ່າຂອງບັດເພື່ອນຳມາຊື້ສິນຄ້າພາຍໃນຮ້ານ<ref>{{cite journal|last=Roark|first=Marc|title=Payment Systems, Consumer Tragedy, and Ineffective Remedies|journal=St. Johns Law Review|year=2014|volume=86|page=Forthcoming|url=http://papers.ssrn.com/sol3/papers.cfm?abstract_id=2211013|accessdate=March 4, 2014}}</ref> ສະຕາບັກຊ໌ໄດ້ເປີດຕົວຢ່າງເປັນທາງການໃນວັນທີ 11 ມັງກອນ ປີ 2011
ໃນວັນທີ 14 ພະຈິກ ປີ 2012 ສະຕາບັກຊ໌ໄດ້ເຮັດການຢື່ນຊື້ [[ທີວານາ]] ໃນລາຄາ 620 ລ້ານໂດລາສະຫະລັດ<ref name=baertlein2012>{{cite news |author=Lisa Baertlein |author2=Martinne Geller |title=Starbucks to buy Teavana in another step beyond coffee |url=http://www.reuters.com/article/2012/11/14/us-teavana-starbucks-idUSBRE8AD1JW20121114 |agency=Reuters |accessdate=November 14, 2012 |date=November 14, 2012 |archive-date=2012-12-07 |archive-url=https://web.archive.org/web/20121207121733/http://www.reuters.com/article/2012/11/14/us-teavana-starbucks-idUSBRE8AD1JW20121114 |url-status=dead }}</ref> ແລະຂໍ້ສະເໜີດັ່ງກ່າວໄດ້ສຳເລັດໃນວັນທີ 31 ທັນວາ ປີ 2012<ref name="Melissa Allison">{{cite news |work=The Seattle Times |date=December 31, 2012 |accessdate=March 1, 2013 |title=Starbucks closes Teavana deal |url=http://seattletimes.com/html/businesstechnology/2020031178_starbucksteavanaxml.html |author=Melissa Allison}}</ref>
ໃນວັນທີ 1 ກຸມພາ ປີ 2013 ສະຕາບັກຊ໌ໄດ້ເປີດສາຂາທຳອິດໃນ[[ເມືອງໂຮ່ຈິມິນ]], [[ປະເທດຫວຽດນາມ]]<ref>{{cite news|title=STARBUCKS TO OPEN 1ST VIETNAM CAFE|url=http://bigstory.ap.org/article/starbucks-open-1st-vietnam-cafe|work=Associated Press|accessdate=January 3, 2013|archive-date=ມັງກອນ 13, 2013|archive-url=https://web.archive.org/web/20130113001129/http://bigstory.ap.org/article/starbucks-open-1st-vietnam-cafe|url-status=dead}}</ref><ref>{{cite web|title=Starbucks, McDonald's go Vietnam|url=http://investvine.com/starbucks-goes-vietnam-mcdonalds-to-follow/|publisher=Investvine|accessdate=January 14, 2013|archive-date=ເມສາ 3, 2013|archive-url=https://web.archive.org/web/20130403093716/http://investvine.com/starbucks-goes-vietnam-mcdonalds-to-follow|url-status=dead}}</ref><ref>{{cite web|title=Starbucks opens first store in coffee-loving Vietnam |url=http://www.straitstimes.com/breaking-news/se-asia/story/starbucks-opens-first-store-coffee-loving-vietnam-20130201 |deadurl=yes |archiveurl=https://web.archive.org/web/20141103165919/http://www.straitstimes.com/breaking-news/se-asia/story/starbucks-opens-first-store-coffee-loving-vietnam-20130201 |archivedate=November 3, 2014 }}</ref> ແລະ ປະກາດວ່າຈະເປີດສາຂາໃນ[[ປະເທດໂກໂກມບີ]] ໃນປາຍເດືອນສິງຫາ ປີ 2013 ໃນກອງປະຊຸມທີ່ໂກໂບຕາ ເຊິ່ງປະທານບໍລິສັດໄດ້ກ່າວວ່າ "ສະຕາບັກຊ໌ເຄົາລົບ ແລະ ຊົມຊອບປະເພນີຂອງກາເຟໃນປະເທດໂກໂລມບີ"<ref>{{cite news|title=Starbucks to open first cafe in Colombia|url=http://www.theaustralian.com.au/news/breaking-news/starbucks-to-open-first-cafe-in-colombia/story-fn3dxix6-1226705378630?utm_source=The%20Australian&utm_medium=email&utm_campaign=editorial&net_sub_uid=44933799|accessdate=August 28, 2013|newspaper=The Australian|date=August 28, 2013|author=AAP}}</ref>
ເດືອນສິງຫາ ປີ 2014 ສະຕາບັກຊ໌ ໄດ້ເປີດສາຂາທໍາອິດໃນວິນລິມບວກ ໃນບຣູກລິນ ເຊິ່ງສາຂານີ້ເປັນໜຶ່ງໃນ 30 ສາຂາຂອງສະຕາບັກຊ໌ທີ່ວາງຂາຍເບຍ ແລະ ວາຍ (ເຫຼົ້າແວງ).<ref>{{cite web|title=New Starbucks in Williamsburg to Serve Alcohol|url=http://thirstynyc.com/new-starbucks-williamsburg-serve-alcohol/|accessdate=August 21, 2014|newspaper=Thirsty NYC|date=August 19, 2014|author=Thirsty NYC|archive-date=2014-08-22|archive-url=https://web.archive.org/web/20140822012505/http://thirstynyc.com/new-starbucks-williamsburg-serve-alcohol/|url-status=dead}}</ref>
ໃນເດືອນກັນຍາ ປີ 2014 ໄດ້ມີການເປີດເຜີຍວ່າສະຕາບັກຊ໌ຈະໄດ້ຫຸ້ນອີກ 60.5% ໃນຮ້ານສະຕາບັກຊ໌ປະເທດຍີ່ປຸ່ນ ເຊິ່ງຍັງບໍ່ໄດ້ເປັນເຈົ້າຂອງ ທີ່ລາຄາ 913.5 ລ້ານໂດລາສະຫະລັດ<ref>{{cite press release| publisher=Reuters| date=September 23, 2014| title=Starbucks buying full control of Japan unit for $914 million| url=http://www.reuters.com/article/2014/09/23/us-starbucks-japan-idUSKCN0HI2I820140923| access-date=2017-02-22| archive-date=2014-09-24| archive-url=https://web.archive.org/web/20140924021402/http://www.reuters.com/article/2014/09/23/us-starbucks-japan-idUSKCN0HI2I820140923| url-status=dead}}</ref>
ເດືອນສິງຫາ ປີ 2015 ສະຕາບັກຊ໌ໄດ້ຢືນຢັນທີ່ຈະເປີດສາຂາໃນ [[ປະເທດກຳປູເຈຍ]] ເຊິ່ງເປັນສາຂາໃນປະເທດທີ 16 ຂອງພາກພື້ນອາຊີ-ປາຊີຟິກ ໂດຍຮ້ານທຳອິດຈະຕັ້ງທີ່[[ພະນົມເປນ]] ໃນປາຍປີ ປີ 2015<ref>{{cite web|title=Starbucks Announces Plans to Bring its Unique Coffeehouse Experience to the Vibrant Cambodian Market|url=https://news.starbucks.com/news/starbucks-to-enter-cambodia|website=Starbucks Newsroom|date=26 August 2015|access-date=23 ຕຸລາ 2022|archive-date=16 ພະຈິກ 2018|archive-url=https://web.archive.org/web/20181116031240/https://news.starbucks.com/news/starbucks-to-enter-cambodia|url-status=dead}}</ref>
ໃນເດືອນກຸມພາ ປີ 2016 ສະຕາບັກຊ໌ໄດ້ຢືນຢັນທີ່ຈະເຮັດຕະຫຼາດໃນ[[ປະເທດອິຕາລີ]] ເຊິ່ງເປັນປະເທດທີ 24 ໃນທະວີບເອີຣົບ ເຊິ່ງຈະເປີດສາຂາທໍາອິດໃນ[[ມິລານ]] ພາຍໃນປີ 2017<ref>{{cite web|title=Starbucks to Open Stores in Italy|url=https://news.starbucks.com/news/starbucks-announces-it-will-open-stores-in-Italy-in-2017|website=Starbucks Newsroom|date=28 February 2016|access-date=23 ຕຸລາ 2022|archive-date=25 ທັນວາ 2016|archive-url=https://web.archive.org/web/20161225223520/https://news.starbucks.com/news/starbucks-announces-it-will-open-stores-in-Italy-in-2017|url-status=dead}}</ref> ໃນເດືອນສິງຫາ ຟລັກສ໌ ພອຣດ໌ ບໍລິສັດສະຕາດອັບ ໄດ້ເປີດຕົວ "ຊີ" (Qi) ເຊິ່ງເປັນເຄື່ອງສາກແບັດເຕີຣີ ໂດຍເລືອກທີ່ຈະໃຊ້ໃນຮ້ານທີ່[[ປະເທດເຢຍລະມັນ]]<ref>{{Cite news|url=http://electronics360.globalspec.com/article/7223/wireless-charging-pads-come-to-starbucks|title=Wireless Charging Pads Come to Starbucks|last=Brown|first=Peter|date=26 August 2016|work=Electronics 360|access-date=21 November 2016|via=}}</ref>
ໃນເດືອນກັນຍາ ປີ 2016 ສະຕາບັກຊ໌ໄດ້ເປີດຕົວຊີຣີ "ອັບສະແຕນເດີສ໌" (Upstanders) ເຊິ່ງໄດ້ຮັບແຮງບັນດານໃຈຈາກຊາວອາເມຣິກັນກ່ຽວກັບຄວາມເມດຕາ, ຄວາມເປັນພົນລະເມືອງ ແລະ ຄວາມສຸພາບ ຊີຣີຈະມີໃຫ້ເປັນພອດແຄສ, ຄຳເວົ້າ ແລະ ວິດີໂອ ໂດຍຈະອອກອາກາດທາງແອັບພລິເຄຊັນ, ອອນລາຍ ແລະ ດິຈິທັລເນັດເວີກຂອງຮ້ານ<ref>{{Cite news|url=https://techcrunch.com/2016/08/10/seagate/ |title=Starbucks debuts its own original content series, "Upstanders," featuring video and podcasts |author=Sarah Perez | publisher=TechCrunch|date=7 September 2016| access-date=9 September 2016}}</ref>
== ສາຂາ ==
ບໍລິສັດມີສຳນັກງານໃຫຍ່ຕັ້ງຢູ່ທີ່[[ຊີແອດເທີນ]] [[ລັດວໍຊິງຕັນ]] ສະຫະລັດອາເມຣິກາ ໂດຍມີພະນັກງານ 3,501 ຄົນ (ຂໍ້ມູນໃນເດືອນມັງກອນປີ 2015)<ref name="lerman2015">{{cite news | author=Lerman, Rachel | title=Starbucks confirms layoffs at Seattle headquarters | date=January 15, 2014 | work=[[Puget Sound Bus. J.|Puget Sound Business Journal]] | url=http://www.bizjournals.com/seattle/blog/2015/01/starbucks-confirms-layoffs-at-seattle-headquarters.html }}</ref>
=== ສາຂາປັດຈຸບັນ ===
ໃນເດືອນກຸມພາ 2023 ສະຕາບັກຊ໌ເປີດສາຂາ 83 ປະເທດ ແລະ ດິນແດນປົກຄອງຕົນເອງ<ref name="loxcel"/><ref name="Profile2014-10" />
{| class="wikitable" style="width:90%;"
<!-- sorted by short column -->
![[ທະວີບອາຟຣິກາ]]
![[ທະວີບອາເມຣິກາເໜືອ]]
![[ທະວີບໂອເຊອານີ]]
![[ທະວີບອາເມຣິກາໃຕ້]]
<!-- sorted by long column -->
![[ທະວີບອາຊີ]]
![[ທະວີບເອີຣົບ]]
|- valign="top"
|
* [[ປະເທດເອຢິບ|ເອຢິບ]]
* [[ປະເທດມາຣົກ|ມາຣົກ]]
* [[ປະເທດອາຟຣິກາໃຕ້|ອາຟຣິກາໃຕ້]]
|
* [[ອາຣູບາ]]
* [[ປະເທດບາຮາມາດ|ບາຮາມາດ]]
* [[ປະເທດການາດາ|ການາດາ]]
* [[ປະເທດໂກສະຕາຣິກາ|ໂກສະຕາຣິກາ]]
* [[ກູຣາຊາວ]]
* [[ປະເທດແອນຊານວາດໍ|ແອນຊານວາດໍ]]
* [[ປະເທດກົວເຕມາລາ|ກົວເຕມາລາ]]
* [[ປະເທດເມັກຊິກ|ເມັກຊິກ]]
* [[ປະເທດປານາມາ|ປານາມາ]]
* [[ປະເທດຕຣີນີດັດ ແລະ ໂຕບາໂກ|ຕຣີນີດັດ ແລະ ໂຕບາໂກ]]
* [[ສະຫະລັດອາເມຣິກາ]]
** [[ປອກໂຕຣິໂກ]]
|
* [[ປະເທດອົດສະຕຣາລີ|ອົດສະຕຣາລີ]]
* [[ປະເທດນູແວນເຊລັງ|ນູແວນເຊລັງ]]
|
* [[ປະເທດອາກຊັງຕີນ|ອາກຊັງຕີນ]]
* [[ປະເທດໂບລີວີ|ໂບລີວີ]]
* [[ປະເທດບຣາຊິນ|ບຣາຊິນ]]
* [[ປະເທດຊີເລ|ຊີເລ]]
* [[ປະເທດໂກໂລມບີ|ໂກໂລມບີ]]
* [[ປະເທດເປຣູ|ເປຣູ]]
| rowspan = "2"|
* [[ປະເທດອາແຊກໄບຊານ|ອາແຊກໄບຊານ]]
* [[ປະເທດບາເຣນ|ບາເຣນ]]
* [[ປະເທດບຣູໄນ|ບຣູໄນ]]<ref name=ST-Brunei>{{Cite news |title=Starbucks enters its 64th company, oil-rich Brunei |newspaper=The Seattle Times |first=Ángel |last=González |url=http://seattletimes.com/html/businesstechnology/2022905198_starbucksbruneixml.html |date=February 13, 2014}}</ref>
* [[ປະເທດກຳປູເຈຍ|ກຳປູເຈຍ]]
* [[ປະເທດຈີນ|ຈີນ]]
** [[ຮົງກົງ]]<ref>[http://www.starbucks.com.hk/ Starbucks Coffee Company]. Starbucks.com.hk. Retrieved on July 18, 2013.</ref>
** [[ມາເກົ້າ]]
* [[ປະເທດອິນເດຍ|ອິນເດຍ]]
* [[ປະເທດອິນໂດເນເຊຍ|ອິນໂດເນເຊຍ]]
* [[ປະເທດຍີ່ປຸ່ນ|ຍີ່ປຸ່ນ]]
* [[ປະເທດຊອກດານີ|ຊອກດານີ]]
* [[ປະເທດກາຊັກສະຖານ|ກາຊັກສະຖານ]]
* [[ປະເທດກູເວດ|ກູເວດ]]
* [[ປະເທດລາວ|ລາວ]]<ref>{{cite web|title=Starbucks Laos|url= https://m.facebook.com/story.php?story_fbid=pfbid02EKbMpDWxTkYA3Brtg1yWx8wX6rCf9q7cUjoZw8cYKJdN9obn25GnyTTnqws8B3JLl&id=110162323927595&mibextid=CtpNnY |accessdate=26 October 2022}}</ref>
* [[ປະເທດລີບັງ|ລີບັງ]]
* [[ປະເທດມາເລເຊຍ|ມາເລເຊຍ]]
* [[ປະເທດໂອມານ|ໂອມານ]]
* [[ປະເທດຟີລິບປິນ|ຟີລິບປິນ]]<ref>{{cite web|title=Starbucks Philippines|url=http://www.starbucks.ph/|publisher=Starbucks Corporation|accessdate=22 November 2016}}</ref>
* [[ປະເທດກາຕາ|ກາຕາ]]
* [[ປະເທດອາຣັບບີ ຊາອູດິດ|ອາຣັບບີ ຊາອູດິດ]]
* [[ປະເທດສິງກະໂປ|ສິງກະໂປ]]
* [[ປະເທດເກົາຫຼີໃຕ້|ເກົາຫຼີໃຕ້]]
* [[ປະເທດສີລັງກາ|ສີລັງກາ]]
* [[ປະເທດໄຕ້ຫວັນ|ໄຕ້ຫວັນ]]
* [[ປະເທດໄທ|ໄທ]]<ref name="invest vine">{{cite web|url=http://investvine.com/thailand-gets-asias-first-community-driven-starbucks/|title=Thailand gets Asia's first community-driven Starbucks|first=Jason|last=Calderon|work=Inside Investor|date=June 17, 2013|accessdate=June 18, 2013|archive-date=ຕຸລາ 6, 2013|archive-url=https://web.archive.org/web/20131006071026/http://investvine.com/thailand-gets-asias-first-community-driven-starbucks/|url-status=dead}}</ref>
* [[ສະຫະນະຄອນ ເອເມຣັດ ອາຣັບ]]
* [[ປະເທດຫວຽດນາມ|ຫວຽດນາມ]]
| rowspan = "2"|
* [[ປະເທດໂອຕຣິດ|ໂອຕຣິດ]]
* [[ປະເທດແບນຊິກ|ແບນຊິກ]]
* [[ປະເທດບູນກາລີ|ບູນກາລີ]]
* [[ປະເທດໄຊປຣັດ|ໄຊປຣັດ]]
** [[ໄຊປຣັດເໜືອ]]
* [[ສາທາລະນະລັດ ເຊັກ]]
* [[ປະເທດດານມາກ|ດານມາກ]]
* [[ປະເທດແຟງລັງ|ແຟງລັງ]]
* [[ປະເທດຝຣັ່ງ|ຝຣັ່ງ]]
* [[ປະເທດເຢຍລະມັນ|ເຢຍລະມັນ]]
* [[ປະເທດເກຣັກ|ເກຣັກ]]
* [[ປະເທດຮົງກາລີ|ຮົງກາລີ]]
* [[ປະເທດອຽກລັງ|ອຽກລັງ]]
* [[ປະເທດອິຕາລີ|ອິຕາລີ]]
* [[ປະເທດລຸກຊຳບວກ|ລຸກຊຳບວກ]]
* [[ປະເທດໂມນາໂກ|ໂມນາໂກ]]
* [[ປະເທດໂຮນລັງ|ໂຮນລັງ]]
* [[ປະເທດນອກແວ|ນອກແວ]]
* [[ປະເທດໂປໂລຍ|ໂປໂລຍ]]
* [[ປະເທດປອກຕຸຍການ|ປອກຕຸຍການ]]
* [[ປະເທດຣູມານີ|ຣູມານີ]]
* [[ປະເທດລັດເຊຍ|ລັດເຊຍ]]
* [[ປະເທດສະໂລວາກີ|ສະໂລວາກີ]]
* [[ປະເທດແອັດສະປາຍ|ແອັດສະປາຍ]]
* [[ປະເທດຊູແອດ|ຊູແອດ]]
* [[ປະເທດສະວິດ|ສະວິດ]]
* [[ປະເທດຕວັກກີ|ຕວັກກີ]]
* [[ສະຫະລາຊະອານາຈັກ]]
** [[ເກີນຊີ]]
|-
| colspan = "4"|[[File:Starbucks Map.svg|550px]]
|}
=== ຮ້ານຄ້າອິດສະຫຼະ ===
ແນວໃດກໍ່ຕາມ ສະຕາບັກຊ໌ ຍັງມີຮ້ານຄ້າທີ່ຕັ້ງຢູ່ຢ່າງອິດສະຫຼະກັບຮ້ານອື່ນ ຄື: ອາໂຮນເດລາຍ, ບານສ໌ແອນໂນເບີນ, ທາເກັດ, ທອມທຳ ໃນປີ 2015 ມີສາຂາອິດສະຫຼະເຖິງ 4,962 ສາຂາ<ref>{{cite web|title=Number of Starbucks stores in the United States from 2005 to 2015*|url=http://www.statista.com/statistics/218360/number-of-starbucks-stores-in-the-us/|website=Statista|accessdate=19 March 2016}}</ref>
== ຈຳນວນສາຂາ ==
<ref name="loxcel"/><ref name="autogenerated1">[http://chartsbin.com/view/30908] {{webarchive|url=https://web.archive.org/web/20150618071741/http://chartsbin.com/view/30908|date=June 18, 2015}}</ref>
{| style="width:100%;"
|-
| style = "width:15%; vertical-align:top; text-align:left;"|
;ທະວີບອາຟຣິກາ
* [[File:Flag of Egypt.svg|20px]] [[ປະເທດເອຢິບ|ເອຢິບ]]: 34
* [[File:Flag of Morocco.svg|20px]] [[ປະເທດໂມຣັອກໂຄ]]: 10
* [[File:Flag of South Africa.svg |20px]] [[ປະເທດແອຟຣິກາໃຕ້|ແອຟຣິກາໃຕ້]]: 10
* [[File: Flag of Jamaica.svg|20px]] [[ປະເທດຈາໄມກາ]]: 1
;ທະວີບອາເມລິກາເໜືອ
* {{flagcountry|United States}}: 14,209
* {{flagcountry|Canada}}: 1,488
* [[File:Flag of Mexico.svg|20px]] [[ປະເທດເມັກຊິໂກ|ເມັກຊິໂກ]]: 656
* [[File:Flag of Puerto Rico.svg |20px]] [[ປະເທດເປີໂຕຣິໂກ]]: 25
* [[File:Flag of El Salvador.svg |20px]] [[ປະເທດເອລ ຊາວາດໍ]]: 11
* [[File:Flag of Costa Rica (state).svg |20px]] [[ປະເທດກົດສະຕາລິກາ|ໂຄສຕາຣິກາ]]: 13
* [[File:Flag of Bahamas.svg |20px]] [[ປະເທດບາຮາມາສ]]: 12
* [[File:Flag of Guatemala.svg |20px]] [[ປະເທດກົວເຕມາລາ]]: 7
* [[File:Flag of Panama.svg |20px]] [[ປະເທດປານາມາ]]: 5
* [[File:Flag of Aruba.svg |20px]] [[ປະເທດອາຣູບາ]]: 3
* [[File:Flag of Trinidad and Tobago.svg |20px]] [[ປະເທດຕຣິນິດາດແລະໂຕເບໂກ]]: 7
* [[File:Flag of Curaçao.svg |20px]] [[ປະເທດຄູຣາຊາວ]]: 3
;ທະວີບໂອເຊຍເນຍ
* {{flagcountry|New Zealand}}: 22
* {{flagcountry|Australia}}: 35
;ທະວີບອາເມຣິກາໃຕ້
* {{flag|ອາເຈນຕິນາ}}: 129
* {{flag|ບຣາຊິລ}}: 114
* {{flag|ເປຣູ}}: 97
* {{flag|ຊິລີ}}: 108
* [[File:Flag of Colombia.svg |20px]] [[ປະເທດໂກລົມບີ|ໂຄລົມເບຍ]]: 25
* [[File: Bandera de Bolivia (Estado).svg |20px]] [[ປະເທດໂບລີວີ|ໂບລີເວຍ]]: 4
| style = "width:15%; vertical-align:top; text-align:left;"|
;ທະວີບອາຊີ
* {{flagcountry|China}}: 5,000
* {{flagcountry|Japan}}: 1,415
* {{flagcountry|South Korea}}: 1,080
* {{flagcountry|Taiwan}}: 430
* {{flagcountry|Thailand}}: 420
* {{flagcountry|Malaysia}}: 327
* {{flag|ຟິລິບປິນ}}: 300
* {{flagcountry|Indonesia}}: 249
* {{flagcountry|Hong Kong}}: 147
* {{flagcountry|United Arab Emirates}}: 169
* {{flagcountry|Singapore}}: 139
* {{flagcountry|India}}: 108
* [[File:Flag of Kuwait.svg |20px]] [[ປະເທດຄູເວດ|ຄູເວດ]]: 136
* {{flagcountry|Saudi Arabia}}: 145
* [[File:Flag of Lebanon.svg |20px]] [[ປະເທດເລບານອນ|ເລບານອນ]]: 37
* {{flagcountry|Vietnam}}: 35
* {{flagcountry|Bahrain}}: 26
* {{flagcountry|Qatar}}: 32
* [[File:Flag of Jordan.svg |20px]] [[ປະເທດຈໍແດນ|ຈໍແດນ]]: 23
* [[File:Flag of Cyprus.svg |20px]] [[ປະເທດໄຊປຣັດ|ໄຊປຣັດ]]: 11
* [[File:Flag of Kazakhstan.svg |20px]] [[ປະເທດຄາຊັກສະຖານ|ຄາຊັກສະຖານ]]: 15
* [[File:Flag of Oman.svg |20px]] [[ປະເທດໂອມານ]]: 13
* {{flag|ອາແຊກບາຍຊັງ}}: 4
* {{flagcountry|Cambodia}}: 10
* {{flagcountry|Brunei}}: 4
* {{flagcountry|Laos}}: 8
| style = "width:15%; vertical-align:top; text-align:left;"|
;ທະວີບເອີຣົບ
* {{flagcountry|United Kingdom}}: 971
* {{flag|ຕວັກກີ}}: 415
* {{flagcountry|Germany}}: 158
* {{flagcountry|Spain}}: 125
* {{flagcountry|France}}: 152
* {{flagcountry|Switzerland}}: 64
* {{flagcountry|Netherlands}}: 71
* {{flag|ໂປແລນດ໌}}: 63
* {{flag|ໄອຣ໌ແລນດ໌}}: 78
* [[File:Flag of Greece.svg|20px]] [[ປະເທດກະແລັດ|ກຣີກ]]: 27
* [[File:Flag of Romania.svg|20px]] [[ປະເທດໂຣມາເນຍ|ໂຣມາເນຍ]]: 37
* {{flag|ໂອຕະລີດ}}: 19
* [[File:Flag of Belgium.svg|20px]] [[ປະເທດແບນຊິກ|ແບນຊິກ]]: 21
* [[File:Flag of the Czech Republic.svg|20px]] [[ສາທາລະນະລັດເຊັກ]]: 33
* {{flagcountry|Denmark}}: 21
* {{flagcountry|Sweden}}: 15
* {{flagcountry|Norway}}: 23
* [[File:Flag of Hungary.svg|20px]] [[ປະເທດຮົງກາລີ|ຮັງກາຣີ]]: 19
* {{flag|ປອກຕຸຍການ}}: 15
* {{flagcountry|Finland}}: 9
* [[File:Flag of Bulgaria.svg|20px]] [[ປະເທດບູນກາລີ|ບຸນກາຣີ]]: 6
* [[File:Flag of Slovakia.svg|20px]] [[ປະເທດສະໂລວາກີ|ສະໂລວາເກຍ]]: 4
* [[File:Flag of Luxembourg.svg|20px]] [[ປະເທດລັກເຊມເບິຣ໌ກ|ລັກເຊມເບີກ]]: 3
* {{flagcountry|ໂມນາໂກ}}: 2
* [[File:Flag of Andorra.svg|20px]] [[ປະເທດອັງໂດລາ|ອັນດໍຣາ]]: 1
|}
ໃນປີ ຄ.ສ. 2008 ສະຕາບັກຊ໌ໄດ້ຂະຫຍາຍສາຂາເພີ່ມໃນອາເຈນຕິນາ, ແບນຊິກ, ບຣາຊິລ, ບຸນກາຣີ, ສາທາລະນະລັດເຊັກ ແລະ ປອກຕຸຍການ<ref name=tele40>{{cite news|url=http://www.telegraph.co.uk/finance/newsbysector/retailandconsumer/8505866/Forty-years-young-A-history-of-Starbucks.html|title=Forty years young: A history of Starbucks|publisher=The Daily Telegraph|date=May 11, 2011|accessdate=November 13, 2012|location=London}}</ref>
ມັນຍັງຂະຫຍາຍສາຂາໄປຍັງສະແກນນີເນເວຍໃນປະເທດໂປແລນ ໃນເດືອນເມສາ ຄ.ສ. 2009 ອີກທັງຂະຫຍາຍສາຂາໃນ[[ຍູເທຣກຕ໌]] ປະເທດເນເທີແລນ ແລະ [[ສະໜາມບິນ ສະຕັອກໂຮມ ອາລັນດາ]] ທີ່ປະເທດສະວີເດັນ ໃນເດືອນຕຸລາປີດຽວກັນ<ref>{{cite web|url=http://www.cisionwire.se/starbucks-coffee-company/starbucks-vaxer-och-oppnar-i-sverige---forsta-starbucks-i-sverige-oppnar-pa-stockholm-arlanda-airport-i-borjan-av-2010-|title=Starbucks Coffee Company – press release (in Swedish)|publisher=Cision Wire|accessdate=October 21, 2009|archive-date=2012-07-23|archive-url=https://archive.is/20120723073922/http://www.cisionwire.se/starbucks-coffee-company/starbucks-vaxer-och-oppnar-i-sverige---forsta-starbucks-i-sverige-oppnar-pa-stockholm-arlanda-airport-i-borjan-av-2010-|url-status=dead}}</ref>
ໃນປີ 2010 ໄດ້ຂະຫຍາຍສາຂາໄປຍັງຕະຫຼາດໃໝ່ ເຊິ່ງໃນເດືອນພຶດສະພາ ໂຮງແຮມເຊາເທຼີນຊັນ ໃນປະເທດອາຟຣິກາໃຕ້ໄດ້ປະກາດວ່າພວກເຂົາໄດ້ເຊັນສັນຍາກັບສະຕາບັກຊ໌ໃນການເປີດຮ້ານຂາຍກາເຟໃນໂຮງແຮມເຊາເທຼີນຊັນ ແລະ ໂຮງແຮມສົງກາສັນ ເຊິ່ງເຮັດໃຫ້ສະຕາບັກຊ໌ສາມາດເປີດຮ້ານໄດ້ທັນໃນການແຂ່ງຂັນ[[ຟຸດບອນໂລກ 2010]] ທີ່ປະເທດອາຟຣິກາໃຕ້<ref>{{cite web|url=http://www.timeslive.co.za/business/article480586.ece/Cuppa-Starbucks-for-the-Cup|title=Cuppa Starbucks for the Cup|publisher=Times Live|accessdate=May 31, 2010|archive-date=2010-06-04|archive-url=https://web.archive.org/web/20100604041332/http://www.timeslive.co.za/business/article480586.ece/Cuppa-Starbucks-for-the-Cup|url-status=dead}}</ref> ຕໍ່ມາໃນເດືອນມິຖຸນາ ສະຕາບັກຊ໌ໄດ້ເປີດຮ້ານທຳອິດໃນ[[ບູດາເປສ]] ປະເທດຮັງກາຣີ ແລະ ໃນເດືອນພະຈິກ ໄດ້ເປີດສາຂາໃນອາເມລິກາກາວ ຕັ້ງຢູ່ໃນ[[ຊານ ຊາວາດໍ]] ເມືອງຫຼວງຂອງປະເທດເອລຊາວາດໍ <ref>{{cite web|url=http://news.starbucks.com/news/starbucks+celebrates+first+store+opening+in+el+salvador.htm |title=Starbucks Newsroom: Starbucks Celebrates First Store Opening in El Salvador |publisher=News.starbucks.com |accessdate=July 7, 2011 |deadurl=yes |archiveurl=https://web.archive.org/web/20101209203538/http://news.starbucks.com/news/starbucks+celebrates+first+store+opening+in+el+salvador.htm |archivedate=December 9, 2010 }}</ref>
ຕໍ່ມາໃນເດືອນທັນວາ ປີ 2010 ສະຕາບັກຊ໌ໄດ້ເປີດຕົວສາຂາທຳອິດ ທີ່ຕັ້ງຢູ່ເທິງທະເລ ໃນຄວາມຮ່ວມມືກັບ[[ຣໍຢອລຄາຣິບບຽນອິນເຕີເນຊັນແນລ]] ເຊິ່ງໄດ້ເປີດຮ້ານຢູ່ເທິງເຮືອ[[ເອັມເອສ ອັລລົວອັອຟເດິຊີຣີສ໌]] ເຊິ່ງເປັນເຮືອກຳປັ່ນລຳທີສອງຂອງບໍລິສັດ ແລະ ເຮືອກຳປັ່ນໃຫຍ່ອັນດັບສອງໃນໂລກ<ref>{{cite news|author=Puget Sound Business Journal by Eric Engleman |url=http://www.bizjournals.com/seattle/news/2010/10/27/first-starbucks-at-sea-to-debut.html |title=First ‘Starbucks at Sea’ to debut - Puget Sound Business Journal |publisher=Bizjournals.com |date=October 27, 2010 |accessdate=November 17, 2012}}</ref>
== ສະຕາບັກຊ໌ສາຂາໃນປະເທດລາວ ==
ການກ້າວເຂົ້າມາປະເທດລາວຂອງ '''ສະຕາບັກຊ໌''' ເປັນການຢືນຢັນຄວາມມຸ່ງໝັ້ນໄລຍະຍາວຂອງບໍລິສັດ ສຳລັບການເຕີບໂຕຢ່າງຕໍ່ເນື່ອງ ໃນທົ່ວພາກພື້ນອາຊີຕາເວັນອອກສຽງໃຕ້ ຫຼ້າສຸດວັນທີ 3 ເດືອນພະຈິກ 2022, ເພື່ອເປັນສ່ວນໜື່ງໃນການຂະຫຍາຍຕົວຢ່າງຕໍ່ເນື່ອງ ຂອງ ສະຕາບັກຊ໌ ໃນທົ່ວພາກພື້ນອາຊີຕາເວັນອອກສຽງໃຕ້, ບໍລິສັດ Coffee Concepts ຈຳກັດ, ເຊິ່ງເປັນບໍລິສັດໃນເຄືອຂອງ ບໍລິສັດ Maxim’s Caterers ຈຳກັດ, ໄດ້ເປີດຕົວຮ້ານສາຂາທຳອິດ ໃນປະເທດລາວຢ່າງເປັນທາງການ, ເຊິ່ງປະເທດລາວເປັນປະເທດທີ 15 ໃນຂົງເຂດອາຊີ-ປາຊີຟິກ ແລະ ເປັນປະເທດທີ 84 ສຳລັບ ສະຕາບັກຊ໌ ໃນທົ່ວໂລກ, ໂດຍຮ້ານດັ່ງກ່າວແມ່ນຕັ້ງຢູ່ທີ່ [[ນະຄອນຫຼວງວຽງຈັນ]].
ການເຂົ້າມາປະເທດລາວຂອງ ສະຕາບັກຊ໌ ຖືເປັນການຢືນຢັນຄວາມມຸ່ງໝັ້ນໄລຍະຍາວຂອງ ສະຕາບັກຊ໌ ໃນການຂະຫຍາຍໂຕຢ່າງຕໍ່ເນື່ອງ ໃນທົ່ວທະວີບອາຊີ ກັບຮ້ານກາເຟທີ່ມີຫຼາຍກວ່າ 12,000 ສາຂາໃນທົ່ວພາກພື້ນ ທ່ານນາງ Emmy Kan, ຮອງປະທານອາວຸໂສ ແລະ ປະທານບໍລິຫານ ສະຕາບັກຊ໌ ອາຊີປາຊີຟິກ ກ່າວວ່າ: “ພວກເຮົາຮູ້ສຶກຕື່ນເຕັ້ນຫຼາຍທີ່ຈະເຮັດໃຫ້ເປົ້າໝາຍທີ່ວາງໄວ້ສູງ ຕໍ່ກັບການເປີດຮ້ານສາຂາທຳອິດໃນປະເທດລາວນັ້ນ ປະສົບຜົນສຳເລັດ.” ນອກຈາກນີ້, ທ່ານຍັງໄດ້ກ່າວຕື່ມອີກວ່າ: “ການທີ່ໄດ້ດຳເນີນກິດຈະການ ໃນພາກພື້ນອາຊີຕາເວັນອອກສຽງໃຕ້ຕະຫຼອດໄລຍະກວ່າ 25 ປີ ຜ່ານມານີ້, ພວກເຮົາຮູ້ສຶກເປັນກຽດທີ່ຈະໄດ້ຕ້ອນຮັບ ພະນັກງານໃໝ່ຫຼ້າສຸດຂອງເຮົາໃນປະເທດລາວ ເພື່ອຮ່ວມສ້າງ ປະສົບການສະຕາບັກຊ໌ ທີ່ຫາທີ່ປຽບບໍ່ໄດ້ ໃຫ້ກັບລູກຄ້າໃນທ້ອງຖິ່ນ ຜ່ານການອອກແບບຮ້ານທີ່ເປັນເອກະລັກ, ເຄື່ອງດື່ມທີ່ຊົງດ້ວຍມື, ປະສົບການກາເຟທີ່ຮອບດ້ານ, ຕະຫຼອດເຖິງບັນຍາກາດທີ່ອົບອຸ່ນ.” ຮ້ານ ສະຕາບັກຊ໌ ໃນປະເທດລາວຈະຖືກບໍລິຫານໂດຍ ບໍລິສັດ Coffee Concepts ຈຳກັດ, ເຊິ່ງເປັນຫຸ້ນສ່ວນທີ່ໄດ້ຮັບອະນຸຍາດ ແລະ ເປັນບໍລິສັດໃນເຄືອຂອງ Maxim’s Caterers ຈຳກັດ. ຜ່ານ ບໍລິສັດ Coffee Concepts ຈຳກັດ, ແບຣນ ສະຕາບັກຊ໌ ໄດ້ດຳເນີນກິດຈະການຫຼາຍກວ່າ 900 ສາຂາ ໃນ [[ຮົງກົງ]] ແລະ [[ມາເກົາ]], [[ຫວຽດນາມ]], [[ກຳປູເຈຍ]], [[ປະເທດສິງກະໂປ|ສິງກະໂປ]] ແລະ [[ປະເທດໄທ]].
ທ່ານ Michael Wu, ປະທານກຳມະການ ແລະ ກຳມະການຜູ້ຈັດການກຸ່ມບໍລິສັດ Maxim ຮົງກົງ, ໄດ້ກ່າວວ່າ: “ເພື່ອເປັນການສະເຫຼີມສະຫຼອງຮ້ານສາຂາທຳອິດໃນປະເທດລາວ, ພວກເຮົາໃຫ້ຄຳໝັ້ນສັນຍາວ່າ ຈະສົ່ງມອບປະສົບການທີ່ດີທີ່ສຸດໃຫ້ກັບບັນດາພະນັກງານໃໝ່ ລວມເຖິງລູກຄ້າ ໃນປະເທດລາວ.” ນອກຈາກນີ້, ທ່ານຍັງໄດ້ກ່າວຕື່ມວ່າ: “ພວກເຮົາຍັງຫວັງວ່າຈະສາມາດສ້າງໂອກາດທີ່ມີຄຸນຄ່າ ໃຫ້ກັບບັນດາພະນັກງານ ແລະ ສົ່ງເສີມເຊື່ອມຕໍ່ສາຍສຳພັນລະຫວ່າງພະນັກງານ ແລະ ລູກຄ້າ ໃນຂະນະທີ່ພວກເຮົາສືບຕໍ່ເຕີບໂຕໃນປະເທດລາວ.”
ດ້ວຍປະຫວັດສາດອັນຍາວນານໃນການຜະລິດກາເຟທີ່ເປັນທີ່ຮູ້ຈັກກັນດີ, ປະເທດລາວເປັນປະເທດໜຶ່ງທີ່ມີວັດທະນະທຳກາເຟທີ່ຄຶກຄື້ນ. ຮ້ານແຫ່ງໃໝ່ນີ້ປະກອບສ່ວນເຂົ້າໃນວັດທະນະທຳກາເຟທີ່ຄຶກຄື້ນດ້ວຍການມອບປະສົບການຮ້ານກາເຟທີ່ອົບອຸ່ນ ແລະ ຄຸ້ນເຄີຍ ຄຽງຄູ່ໄປກັບເຄື່ອງດື່ມທີ່ມີເອກະລັກສະເພາະຂອງ ສະຕາບັກຊ໌. ດ້ວຍແຮງບັນດານໃຈຈາກລວດລາຍທີ່ເປັນຊັ້ນ ແລະ ຄວາມສົມດຸນຂອງສະຖາປັດຕະຍະກຳລາວ, ຮ້ານແຫ່ງນີ້ໄດ້ຖືກອອກແບບມາເພື່ອນຳເອົາປະສົບການກາເຟ ແລະ ມໍລະດົກຂອງແບຣນພວກເຮົາໃຫ້ປະກົດຜົນເປັນຈິງ.
ລວດລາຍຂອງບ່ອນເປີດປະຕູທີ່ເຮັດດ້ວຍມື ຖືກອອກແບບມາເພື່ອຕ້ອນຮັບລູກຄ້າ ດ້ວຍສຳຜັດທີ່ແທ້ຈິງຕັ້ງແຕ່ຊ່ວງເວລາທຳອິດທີ່ກ້າວເຂົ້າມາໃນຮ້ານ. ເພດານທັງໝົດແມ່ນເຮັດດ້ວຍກະເບື້ອງໄມ້ທີ່ມີລັກສະນະຄືກັບນາງເງືອກ ເພື່ອໃຫ້ເຂົ້າກັບສັນຍາລັກຂອງແບຣນ ແລະ ສະຖາປັດຕະຍະກຳຂອງເຄຫາສະຖານບູຮານໃນປະເທດລາວ. ເພດານຖືກປະດັບດ້ວຍຫັດຖະກຳໄມ້ແບບບູຮານ ທີ່ໄດ້ຮັບແຮງບັນດານໃຈມາຈາກຕົ້ນກາເຟ ແລະ ທິວທັດທຳມະຊາດໃນປະເທດ, ສ້າງເປັນ Third Place ຫຼື ສະຖານທີ່ທີສາມ ເຊິ່ງເປັນອີກສະຖານທີ່ໜຶ່ງທີ່ໃຫ້ຄວາມອົບອຸ່ນໜ້າຢູ່ ແລະ ບັນຍາກາດທີ່ຄຸ້ນເຄີຍສຳລັບລູກຄ້າ.
ຮ້ານແຫ່ງນີ້ຖືກສ້າງຂຶ້ນຈາກແນວທາງຂອງ ສະຕາບັກຊ໌ ເພື່ອສົ່ງມອບ ປະສົບການສະຕາບັກຊ໌ ໃຫ້ກັບພະນັກງານ ແລະ ລູກຄ້າດ້ວຍວິທີທີ່ຕິດພັນກັບທ້ອງຖິ່ນ, ພ້ອມເຊີດຊູມໍລະດົກ ແລະ ຄວາມສວຍສົດງົດງາມຂອງສິລະປະພື້ນເມືອງລາວເຮົາ. ດ້ວຍການຮ່ວມມືກັບສິລະປິນໃນທ້ອງຖິ່ນ, ຈຶ່ງເກີດມີພາບວາດທີ່ແຕ້ມດ້ວຍມືຂອງນາງເງືອກທີ່ກຳລັງຖືພວງກາເຟພ້ອມແນມໄປຂ້າງໜ້າຢ່າງກ້າຫານ. ບາກາເຟ ຕັ້ງຢູ່ບໍລິເວນໃຈກາງຂອງຮ້ານ, ເນື່ອງຈາກການເຊື່ອມຕໍ່ສາຍສຳພັນກັບລູກຄ້າຖືເປັນຫົວໃຈຫຼັກ ຂອງປະສົບການດັ່ງກ່າວ.
ປະຈຸບັນ ສະຕາບັກຊ໌ ດຳເນີນກິດຈະການຢູ່ຫຼາຍກວ່າ 10,000 ສາຂາ, 6 ສາຂາ ໃນປະເທດລາວ ແລະ ມີພະນັກງານຜູ້ທີ່ພູມໃຈ ສວມໃສ່ຜ້າກັນເປື້ອນສີຂຽວ ຢູ່ຫຼາຍກວ່າ 149,000 ຄົນ ໃນຂົງເຂດອາຊີ, ລວມທັງ [[ປະເທດຈີນ]] ແລະ [[ຍີ່ປຸ່ນ]].
==ການໂຄສະນາ==
===ໂລໂກ້===
{{multiple image
|direction=vertical
|width=125
|image1=
|caption1=1971–1987
|image2=
|caption2=1992–2011
|image3=
|caption3=2011–ປັດຈຸບັນ
}}
ໃນປີ 2006 ວາເລີຣີ ໂອເນລ ໄດ້ໂຄສະນາຜ້າຜູ້ຍິງຂອງສະຕາບັກຊ໌ເວົ້າວ່າໂລໂກ້ຂອງບໍລິສັດແມ່ນຮູບນາງເງືອກທີ່ມີສອງຫາງ ຫຼື [[ໄຊເຣນ]] (siren) ທີ່ເປັນທີ່ຮູ້ຈັກໃນ[[ຕຳນານເກຣັກ]]<ref name="pi-logo">{{cite news |title=The Insider: Principal roasts Starbucks over steamy retro logo |work=[[Seattle Post-Intelligencer]] |date=September 11, 2006 |url=http://www.seattlepi.com/business/284533_theinsider11.html |accessdate=May 23, 2007}}</ref> ໂລໂກ້ໄດ້ມີການປ່ຽນແປງເລື້ອຍໆມາ ໃນເວີຊັນທຳອິດນັ້ນ<ref name="pouryourheart">{{cite book |last=Schultz |first=Howard |author2=Dori Jones Yang |title=Pour Your Heart Into It: How Starbucks Built a Company One Cup at a Time |year=1997 |publisher=Hyperion |location=New York |isbn=0-7868-6315-3 }}</ref> ໄຊເຣນມີລັກສະນະເປືອຍອົກ ແລະ ເຫັນຫາງທັງສອງໄດ້ຢ່າງຊັດເຈນ<ref name=Pren253>Pendergrast, p. 253</ref> ຮູບນັ້ນມີລັກສະນະຫຍາບ ແລະ ຄ້າຍກັບເມລູຊີນ [[melusine|(melusine]])<ref>{{cite journal|last=Rippin|first=Ann|year=2007|title=Space, place and the colonies: re-reading the Starbucks' story|journal=Critical perspectives on international business|publisher=Emerald Group Publishing|volume=3|issue=2|pages=136–149|issn=1742-2043|url=http://www.emeraldinsight.com/Insight/ViewContentServlet?Filename=Published%2FEmeraldFullTextArticle%2FArticles%2F2900030202.html|doi=10.1108/17422040710744944|access-date=2018-04-17|archive-date=2009-08-11|archive-url=https://web.archive.org/web/20090811052746/http://www.emeraldinsight.com/Insight/ViewContentServlet?Filename=Published%2FEmeraldFullTextArticle%2FArticles%2F2900030202.html|url-status=dead}}</ref> ບໍລິສັດກ່າວວ່າຮູບນີ້ນຳມາຈາກ[[ຮູບພິມແກະດ້ວຍໄມ້]]ຂອງ[[ຊາວໂນສ]] ເຖິງແມ່ນວ່ານັກວິຊາການຈະໂຕ້ຖຽງວ່າເອົາມາຈາກ ແມ່ພິມໄມ້ຂອງ [[Juan Eduardo Cirlot|J.E. Cirlot]] ໃນໜັງສື ''Dictionary of Symbols'' ໃນສັດຕະວັດທີ 15<ref>Carl Pyrdum, [http://www.gotmedieval.com/2010/08/the-other-starbucks-mermaid-cover-up.html "The Other Starbucks Mermaid Cover-Up"], Got Medieval, August 31, 2010 (accessed March 1, 2015)</ref><ref>Christopher Shea, "Medieval Scholar Hot on Trail of Starbucks Logo Cover-Up", ''Wall Street Journal'' Ideas Market January 31, 2011 (accessed March 1, 2015)</ref>
ໃນເວີຊັນທີສອງທີໃຊ້ໃນຊ່ວງປີ 1987-1992 ໜ້າອົກຂອງນາງຖືກປິດດ້ວຍຜົມແຕ່[[ສະດື]]ຍັງສາມາດເບິ່ງເຫັນໄດ້<ref>Robert Klara, [http://www.adweek.com/news/advertising-branding/how-topless-mermaid-made-starbucks-cup-icon-160396 How a Topless Mermaid Made the Starbucks Cup an Icon], ''Ad Week,'' September 29, 2014, (accessed March 1, 2015)</ref> ຫາງປາບາງສ່ວນໄດ້ຖືກຕັດອອກ ແລະ ສີຫຼັກຖືກເປັນຈາກສີນໍ້າຕານມາເປັນສີຂຽວ ຄືກັບສີມະຫາວິທະຍາໄລຂອງຜູ້ກໍ່ຕັ້ງທັງສາມ [[ມະຫາວິທະຍາໄລ ຊານ ຟຣານຊິສໂກ]]<ref>{{cite web|last=Allison |first=Melissa |url=http://seattletimes.nwsource.com/html/businesstechnology/2004269831_bowker09.html |title=Starbucks co-founder talks about early days, launching Redhook and Seattle Weekly |publisher=Seattletimes.nwsource.com |accessdate=May 9, 2014}}</ref><ref>{{cite web|last=Larimore |first=Rachael |url=http://www.slate.com/articles/business/when_big_businesses_were_small/2013/10/starbucks_business_strategy_how_ceo_howard_schultz_conquered_the_world.html |title=Starbucks business strategy: How CEO Howard Schultz conquered the world |publisher=Slate.com |date=October 24, 2013 |accessdate=May 9, 2014}}</ref> ໃນເວີຊັນທີສາມທີ່ໃຊ້ລະຫວ່າງປີ 1992 ເຖິງ 2011 ທັງສາຍສະດື ຫຼື ໜ້າອົກຂອງນາງບໍ່ສາມາດເຫັນໄດ້ເລີນ ມີພຽງແຕ່ຮ່ອງຮອຍຂອງຫາງປາເທົ່ານັ້ນ
== ອ້າງອີງ ==
{{ລາຍການອ້າງອີງ}}
== ແຫຼ່ງຂໍ້ມູນອື່ນ ==
{{commons category}}
* [http://www.starbucks.com/ ສະຕາບັກຊ໌]
* [https://www.facebook.com/starbuckslaos/ ສະຕາບັກຊ໌ ລາວ]
[[ໝວດ:ບໍລິສັດຂ້າມຊາດ]]
[[ໝວດ:ທຸລະກິດກາເຟ]]
gzqxdoo5vy36xfehkjek8yzbbaxcv1x
Module:High-use
828
18370
129397
97977
2026-07-29T09:32:12Z
Khomphoi28
15846
129397
Scribunto
text/plain
local p = {}
-- _fetch looks at the "demo" argument.
local _fetch = require('Module:Transclusion_count').fetch
local yesno = require('Module:Yesno')
function p.num(frame, count)
if count == nil then
if yesno(frame.args['fetch']) == false then
if (frame.args[1] or '') ~= '' then count = tonumber(frame.args[1]) end
else
count = _fetch(frame)
end
end
-- Build output string
local return_value = ""
if count == nil then
if frame.args[1] == "risk" then
return_value = "ຈຳນວນຫຼາຍ"
else
return_value = "ຫຼາຍພັນ"
end
else
-- Use 2 significant figures for smaller numbers and 3 for larger ones
local sigfig = 2
if count >= 100000 then
sigfig = 3
end
-- Prepare to round to appropriate number of sigfigs
local f = math.floor(math.log10(count)) - sigfig + 1
-- Round and insert "approximately" or "+" when appropriate
if (frame.args[2] == "yes") or (mw.ustring.sub(frame.args[1],-1) == "+") then
-- Round down
return_value = string.format("%s+", mw.getContentLanguage():formatNum(math.floor( (count / 10^(f)) ) * (10^(f))) )
else
-- Round to nearest
return_value = string.format("ປະມານ %s", mw.getContentLanguage():formatNum(math.floor( (count / 10^(f)) + 0.5) * (10^(f))) )
end
-- Insert percentage of pages if that is likely to be >= 1% and when |no-percent= not set to yes
if count and count > 250000 and not yesno (frame:getParent().args['no-percent']) then
local percent = math.floor( ( (count/frame:callParserFunction('NUMBEROFPAGES', 'R') ) * 100) + 0.5)
if percent >= 1 then
return_value = string.format(" %sໜ້າ ຫຼື ປະມານ %s%% ຂອງທັງໝົດ", return_value, percent)
end
end
end
return return_value
end
-- Actions if there is a large (greater than or equal to 100,000) transclusion count
function p.risk(frame)
local return_value = ""
if frame.args[1] == "risk" then
return_value = "risk"
else
local count = _fetch(frame)
if count and count >= 100000 then return_value = "risk" end
end
return return_value
end
function p.text(frame, count)
-- Only show the information about how this template gets updated if someone
-- is actually editing the page and maybe trying to update the count.
local bot_text = (frame:preprocess("{{REVISIONID}}") == "") and "\n\n----\n'''Preview message''': Transclusion count updated automatically ([[Template:High-use/doc#Technical details|see documentation]])." or ''
if count == nil then
if yesno(frame.args['fetch']) == false then
if (frame.args[1] or '') ~= '' then count = tonumber(frame.args[1]) end
else
count = _fetch(frame)
end
end
local title = mw.title.getCurrentTitle()
if title.subpageText == "doc" or title.subpageText == "sandbox" then
title = title.basePageTitle
end
local systemMessages = frame.args['system']
if frame.args['system'] == '' then
systemMessages = nil
end
local find_ns = ("%s"):format(mw.title.getCurrentTitle().namespace == 828 and "Module" or "ແມ່ແບບ")
-- This retrieves the project URL automatically to simplify localiation.
local templateCount = ('[https://linkcount.toolforge.org/index.php?project=%s&page=%s %s ໜ້າ]'):format(
mw.title.getCurrentTitle():fullUrl():gsub('//(.-)/.*', '%1'),
mw.uri.encode(title.fullText), p.num(frame, count))
local used_on_text = "'''ມີການໃຊ້" .. find_ns .. 'ນີ້';
if systemMessages then
used_on_text = used_on_text .. systemMessages ..
((count and count > 2000) and ("''' ແລະ " .. templateCount) or ("'''"))
else
used_on_text = used_on_text .. templateCount .. "'''"
end
local sandbox_text = ("[[%s/sandbox|ກ່ອງຊາຍ]] ຫຼື [[%s/testcases|ໜ້າທົດສອບ]] ຫຼື ໃນ[[%s]]ຂອງທ່ານເອງ"):format(
title.fullText, title.fullText,
mw.title.getCurrentTitle().namespace == 828 and "Module:Sandbox|ມໍດູນກ່ອງຊາຍ" or "ວິກິພີເດຍ:ໜ້າຜູ້ໃຊ້#ສັບສະເພາະ ແລະ ທີ່ຕັ້ງໜ້າ|ໜ້າຍ່ອຍຜູ້ໃຊ້"
)
local infoArg = frame.args["info"] ~= "" and frame.args["info"]
if (systemMessages or frame.args[1] == "risk" or (count and count >= 100000) ) then
local info = systemMessages and '<br/>ການແກ້ໄຂອາດເຮັດໃຫ້ເກີດຜົນກະທົບ ຫຼື ສັງເກດເຫັນໄດ້' or '.'
if infoArg then
info = info .. "<br />" .. infoArg
end
sandbox_text = info .. '<br /> ເພື່ອຫຼີກເວັ້ນບໍ່ໃຫ້ເກີດການຂັດຂວາງຄັ້ງໃຫຍ່' ..
(count and count >= 100000 and ' ແລະ ໂຫຼດເຊີບເວີ' or '') ..
' ດັ່ງນັ້ນກ່ອນແກ້ໄຂ' .. find_ns .. 'ນີ້ຈຶ່ງທົດລອງຂຽນ' .. sandbox_text ..
'ຈົນໝັ້ນໃຈວ່າຈະບໍ່ເກີດຜົນເສຍຕາມມາ '
else
sandbox_text = (infoArg and ('<br />' .. infoArg .. '') or ' ແລະ ') ..
'ການແກ້ໄຂອາດເຮັດໃຫ້ເກີດຜົນກະທົບ ຫຼື ສັງເກດເຫັນໄດ້ ຄວນທົດສອບການປ່ຽນແປງໃນ' .. sandbox_text
end
local discussion_text = systemMessages and '' or 'ນອກຈາກນີ້ທ່ານຍັງສາມາດສົນທະນາກ່ຽວກັບການແກ້ໄຂ' .. find_ns .. 'ໄດ້ທີ່'
if frame.args["2"] and frame.args["2"] ~= "" and frame.args["2"] ~= "yes" then
discussion_text = string.format("%s[[%s]]", discussion_text, frame.args["2"])
else
discussion_text = string.format("%s[[%s|ໜ້າສົນທະນາ]]", discussion_text, title.talkPageTitle.fullText )
end
return used_on_text .. sandbox_text .. discussion_text .. " ກ່ອນທີ່ຈະນຳໄປໃຊ້" .. bot_text
end
function p.main(frame)
local count = nil
if yesno(frame.args['fetch']) == false then
if (frame.args[1] or '') ~= '' then count = tonumber(frame.args[1]) end
else
count = _fetch(frame)
end
local image = "[[File:Ambox warning yellow.svg|40px|alt=Warning|link=]]"
local type_param = "style"
local epilogue = ''
if frame.args['system'] and frame.args['system'] ~= '' then
image = "[[File:Ambox important.svg|40px|alt=Warning|link=]]"
type_param = "content"
local nocat = frame:getParent().args['nocat'] or frame.args['nocat']
local categorise = (nocat == '' or not yesno(nocat))
if categorise then
epilogue = frame:preprocess('{{Sandbox other||{{#switch:{{#invoke:Effective protection level|{{#switch:{{NAMESPACE}}|File=upload|#default=edit}}|{{FULLPAGENAME}}}}|sysop|templateeditor|interfaceadmin=|#default=[[Category:Pages used in system messages needing protection]]}}}}')
end
elseif (frame.args[1] == "risk" or (count and count >= 100000)) then
image = "[[File:Ambox warning orange.svg|40px|alt=Warning|link=]]"
type_param = "content"
end
if frame.args["form"] == "editnotice" then
return frame:expandTemplate{
title = 'editnotice',
args = {
["image"] = image,
["text"] = p.text(frame, count),
["expiry"] = (frame.args["expiry"] or "")
}
} .. epilogue
else
return require('Module:Message box').main('ombox', {
type = type_param,
image = image,
text = p.text(frame, count),
expiry = (frame.args["expiry"] or "")
}) .. epilogue
end
end
return p
9xs3maq44guodmpnz4on36zxsxadmzk
129398
129397
2026-07-29T09:34:36Z
Khomphoi28
15846
129398
Scribunto
text/plain
local p = {}
-- _fetch looks at the "demo" argument.
local _fetch = require('Module:Transclusion_count').fetch
local yesno = require('Module:Yesno')
function p.num(frame, count)
if count == nil then
if yesno(frame.args['fetch']) == false then
if (frame.args[1] or '') ~= '' then count = tonumber(frame.args[1]) end
else
count = _fetch(frame)
end
end
-- Build output string
local return_value = ""
if count == nil then
if frame.args[1] == "risk" then
return_value = "ຈຳນວນຫຼາຍ"
else
return_value = "ຫຼາຍພັນ"
end
else
-- Use 2 significant figures for smaller numbers and 3 for larger ones
local sigfig = 2
if count >= 100000 then
sigfig = 3
end
-- Prepare to round to appropriate number of sigfigs
local f = math.floor(math.log10(count)) - sigfig + 1
-- Round and insert "approximately" or "+" when appropriate
if (frame.args[2] == "yes") or (mw.ustring.sub(frame.args[1],-1) == "+") then
-- Round down
return_value = string.format("%s+", mw.getContentLanguage():formatNum(math.floor( (count / 10^(f)) ) * (10^(f))) )
else
-- Round to nearest
return_value = string.format("ປະມານ %s", mw.getContentLanguage():formatNum(math.floor( (count / 10^(f)) + 0.5) * (10^(f))) )
end
-- Insert percentage of pages if that is likely to be >= 1% and when |no-percent= not set to yes
if count and count > 250000 and not yesno (frame:getParent().args['no-percent']) then
local percent = math.floor( ( (count/frame:callParserFunction('NUMBEROFPAGES', 'R') ) * 100) + 0.5)
if percent >= 1 then
return_value = string.format(" %s ໜ້າ ຫຼື ປະມານ %s%% ຂອງທັງໝົດ", return_value, percent)
end
end
end
return return_value
end
-- Actions if there is a large (greater than or equal to 100,000) transclusion count
function p.risk(frame)
local return_value = ""
if frame.args[1] == "risk" then
return_value = "risk"
else
local count = _fetch(frame)
if count and count >= 100000 then return_value = "risk" end
end
return return_value
end
function p.text(frame, count)
-- Only show the information about how this template gets updated if someone
-- is actually editing the page and maybe trying to update the count.
local bot_text = (frame:preprocess("{{REVISIONID}}") == "") and "\n\n----\n'''Preview message''': Transclusion count updated automatically ([[Template:High-use/doc#Technical details|see documentation]])." or ''
if count == nil then
if yesno(frame.args['fetch']) == false then
if (frame.args[1] or '') ~= '' then count = tonumber(frame.args[1]) end
else
count = _fetch(frame)
end
end
local title = mw.title.getCurrentTitle()
if title.subpageText == "doc" or title.subpageText == "sandbox" then
title = title.basePageTitle
end
local systemMessages = frame.args['system']
if frame.args['system'] == '' then
systemMessages = nil
end
local find_ns = ("%s"):format(mw.title.getCurrentTitle().namespace == 828 and "Module" or "ແມ່ແບບ")
-- This retrieves the project URL automatically to simplify localiation.
local templateCount = ('[https://linkcount.toolforge.org/index.php?project=%s&page=%s %s ໜ້າ]'):format(
mw.title.getCurrentTitle():fullUrl():gsub('//(.-)/.*', '%1'),
mw.uri.encode(title.fullText), p.num(frame, count))
local used_on_text = "'''ມີການໃຊ້" .. find_ns .. 'ນີ້';
if systemMessages then
used_on_text = used_on_text .. systemMessages ..
((count and count > 2000) and ("''' ແລະ " .. templateCount) or ("'''"))
else
used_on_text = used_on_text .. templateCount .. "'''"
end
local sandbox_text = ("[[%s/sandbox|ກ່ອງຊາຍ]] ຫຼື [[%s/testcases|ໜ້າທົດສອບ]] ຫຼື ໃນ[[%s]]ຂອງທ່ານເອງ"):format(
title.fullText, title.fullText,
mw.title.getCurrentTitle().namespace == 828 and "Module:Sandbox|ມໍດູນກ່ອງຊາຍ" or "ວິກິພີເດຍ:ໜ້າຜູ້ໃຊ້#ສັບສະເພາະ ແລະ ທີ່ຕັ້ງໜ້າ|ໜ້າຍ່ອຍຜູ້ໃຊ້"
)
local infoArg = frame.args["info"] ~= "" and frame.args["info"]
if (systemMessages or frame.args[1] == "risk" or (count and count >= 100000) ) then
local info = systemMessages and '<br/>ການແກ້ໄຂອາດເຮັດໃຫ້ເກີດຜົນກະທົບ ຫຼື ສັງເກດເຫັນໄດ້' or '.'
if infoArg then
info = info .. "<br />" .. infoArg
end
sandbox_text = info .. '<br /> ເພື່ອຫຼີກເວັ້ນບໍ່ໃຫ້ເກີດການຂັດຂວາງຄັ້ງໃຫຍ່' ..
(count and count >= 100000 and ' ແລະ ໂຫຼດເຊີບເວີ' or '') ..
' ດັ່ງນັ້ນກ່ອນແກ້ໄຂ' .. find_ns .. 'ນີ້ຈຶ່ງທົດລອງຂຽນ' .. sandbox_text ..
'ຈົນໝັ້ນໃຈວ່າຈະບໍ່ເກີດຜົນເສຍຕາມມາ '
else
sandbox_text = (infoArg and ('<br />' .. infoArg .. '') or ' ແລະ ') ..
'ການແກ້ໄຂອາດເຮັດໃຫ້ເກີດຜົນກະທົບ ຫຼື ສັງເກດເຫັນໄດ້ ຄວນທົດສອບການປ່ຽນແປງໃນ' .. sandbox_text
end
local discussion_text = systemMessages and '' or 'ນອກຈາກນີ້ທ່ານຍັງສາມາດສົນທະນາກ່ຽວກັບການແກ້ໄຂ' .. find_ns .. 'ໄດ້ທີ່'
if frame.args["2"] and frame.args["2"] ~= "" and frame.args["2"] ~= "yes" then
discussion_text = string.format("%s[[%s]]", discussion_text, frame.args["2"])
else
discussion_text = string.format("%s[[%s|ໜ້າສົນທະນາ]]", discussion_text, title.talkPageTitle.fullText )
end
return used_on_text .. sandbox_text .. discussion_text .. " ກ່ອນທີ່ຈະນຳໄປໃຊ້" .. bot_text
end
function p.main(frame)
local count = nil
if yesno(frame.args['fetch']) == false then
if (frame.args[1] or '') ~= '' then count = tonumber(frame.args[1]) end
else
count = _fetch(frame)
end
local image = "[[File:Ambox warning yellow.svg|40px|alt=Warning|link=]]"
local type_param = "style"
local epilogue = ''
if frame.args['system'] and frame.args['system'] ~= '' then
image = "[[File:Ambox important.svg|40px|alt=Warning|link=]]"
type_param = "content"
local nocat = frame:getParent().args['nocat'] or frame.args['nocat']
local categorise = (nocat == '' or not yesno(nocat))
if categorise then
epilogue = frame:preprocess('{{Sandbox other||{{#switch:{{#invoke:Effective protection level|{{#switch:{{NAMESPACE}}|File=upload|#default=edit}}|{{FULLPAGENAME}}}}|sysop|templateeditor|interfaceadmin=|#default=[[Category:Pages used in system messages needing protection]]}}}}')
end
elseif (frame.args[1] == "risk" or (count and count >= 100000)) then
image = "[[File:Ambox warning orange.svg|40px|alt=Warning|link=]]"
type_param = "content"
end
if frame.args["form"] == "editnotice" then
return frame:expandTemplate{
title = 'editnotice',
args = {
["image"] = image,
["text"] = p.text(frame, count),
["expiry"] = (frame.args["expiry"] or "")
}
} .. epilogue
else
return require('Module:Message box').main('ombox', {
type = type_param,
image = image,
text = p.text(frame, count),
expiry = (frame.args["expiry"] or "")
}) .. epilogue
end
end
return p
nrjh5lwet9zklreklw3c46ovin2tit3
Module:If preview
828
18524
129404
98053
2026-07-29T09:47:01Z
Khomphoi28
15846
129404
Scribunto
text/plain
local p = {}
local getArgs = require("Module:Arguments").getArgs
local yn = require("Module:Yesno")
local cfg = mw.loadData('Module:If preview/configuration')
--[[
main
This function returns either the first argument or second argument passed to
this module, depending on whether the page is being previewed.
]]
function p.main(frame)
local args = getArgs(frame)
if cfg.preview then
return args[1] or ''
else
return args[2] or ''
end
end
--[[
pmain
This function returns either the first argument or second argument passed to
this module's parent (i.e. template using this module), depending on whether it
is being previewed.
]]
function p.pmain(frame)
return p.main(frame:getParent())
end
local function warning_text(warning)
return mw.ustring.format(
cfg.warning_infrastructure,
cfg.templatestyles,
warning
)
end
function p._warning(args)
local warning = args[1] and args[1]:match('^%s*(.-)%s*$') or ''
if warning == '' then
return warning_text(cfg.missing_warning)
end
if not cfg.preview then return '' end
if yn(args['consolewarning']) then mw.addWarning(args[1] or cfg.missing_warning) end
return warning_text(warning)
end
--[[
warning
This function returns a "preview warning", which is the first argument marked
up with HTML and some supporting text, depending on whether the page is being previewed.
]]
-- function p.warning(frame)
-- mw.addWarning(frame.args[1] or cfg.missing_warning)
-- return p._warning(frame.args)
-- end
--[[
warning, but for pass-through templates like {{preview warning}}
]]
function p.pwarning(frame)
local args = getArgs(frame)
return p._warning(args)
end
--[[
Does both mw.addWarning and preview warning
]]
function p.warn(text)
if text == nil or text == "" then return "" end
mw.addWarning(text)
return p._warning({text})
end
--[[
Console warning
]]
function p.consoleWarning(frame)
local args = getArgs(frame)
mw.addWarning(args[1] or cfg.missing_warning)
return ''
end
return p
9xxiwh6yksz0t17svyd7nlq7rj3f5rk
ແມ່ແບບ:ກ່ອງຂໍ້ມູນ ນັກມວຍປໍ້າ
10
25051
129401
128911
2026-07-29T09:41:45Z
Khomphoi28
15846
/* */
129401
wikitext
text/x-wiki
<includeonly>{{#invoke:Template wrapper|wrap|_template=Infobox sportsperson
| _alias-map = partner:life_partner
| _exclude = ring_names, names, billed, trainer, debut, signature, signature_size, signature alt, signature_alt
| _reuse = module, module2, module3, module4, partner, height, weight, retired
| embed-header =[[ມວຍປໍ້າມືອາຊີບ|ນັກມວຍປໍ້າອາຊີບ]]
| career_header =[[ມວຍປໍ້າອາຊີບ|ນັກມວຍປໍ້າອາຊີບ]]
| family_label = [[List of family relations in professional wrestling|ຕະກຸນ]]
| template_name = ກ່ອງຂໍ້ມູນ ນັກມວຍປໍ້າ
| module3 = {{{module|}}}
| module2 = {{Infobox
| child = yes
| label14 = {{nowrap|ຊື່ໃນສັງວຽນ}}
| data14 = {{if empty|{{{ring_names|}}}|{{{names|}}}}}
| label15 = ສ່ວນສູງ
| data15 = {{#if:{{{height|}}}|{{infobox person/height|{{{height}}}}}}}
| label16 = ນໍ້າໜັກ
| data16 = {{#if:{{{weight|}}}|{{infobox person/weight|{{{weight}}}}}}}
| label17 = ມາຈາກ
| data17 = {{{billed|}}}
| label18 = {{nowrap|ເຝິກຫັດໂດຍ}}
| data18 = {{{trainer|}}}
| label19 = ເປີດຕົວ
| data19 = {{{debut|}}}
| label20 = ຣີທາຍ
| data20 = {{{retired|}}}
}}
| module4 = {{Infobox
| child = yes
| headerstyle = background:#CCCC99;
| header1 = {{#if:{{{signature|}}}|ລາຍເຊັນ}}
| data2 = {{#invoke:InfoboxImage|InfoboxImage|image={{{signature|}}}|size={{{signature_size|}}}|sizedefault=150px|alt={{if empty|{{{signature alt|}}}|{{{signature_alt|}}}}}}}
}}
}}{{#invoke:Check for conflicting parameters|check
| template = [[ແມ່ແບບ:ກ່ອງຂໍ້ມູນ ນັກມວຍປໍ້າ]]
| cat = {{main other|Category:Pages using infobox professional wrestler with conflicting parameters}}
| partner; life_partner
| ring_names; names
| signature alt; signature_alt
}}</includeonly><noinclude>
{{documentation}}
</noinclude>
o1qyi6wyia4s2xli7oq41lbzbcef078
Module:InfoboxImage/data
828
25139
129391
2026-07-29T08:58:01Z
Khomphoi28
15846
ສ້າງໜ້າດ້ວຍ " local placeholderList = { "Blue - Replace this image female.svg", "Blue - Replace this image male.svg", "Flag of None (square).svg", "Flag of None.svg", "Flag of.svg", "Green - Replace this image female.svg", "Green - Replace this image male.svg", "Image is needed female.svg", "Image is needed male.svg", "Location map of None.svg", "Male no free image yet.png", "Missing flag.png", "No flag.svg", "No..."
129391
Scribunto
text/plain
local placeholderList = {
"Blue - Replace this image female.svg",
"Blue - Replace this image male.svg",
"Flag of None (square).svg",
"Flag of None.svg",
"Flag of.svg",
"Green - Replace this image female.svg",
"Green - Replace this image male.svg",
"Image is needed female.svg",
"Image is needed male.svg",
"Location map of None.svg",
"Male no free image yet.png",
"Missing flag.png",
"No flag.svg",
"No free portrait.svg",
"No portrait (female).svg",
"No portrait (male).svg",
"Red - Replace this image female.svg",
"Red - Replace this image male.svg",
"Replace this image female.svg",
"Replace this image male (blue).svg",
"Replace this image male.svg",
"Silver - Replace this image female.svg",
"Silver - Replace this image male.svg",
"Replace this image.svg",
"Cricket no pic.png",
"CarersLogo.gif",
"Diagram Needed.svg",
"Example.jpg",
"Image placeholder.png",
"No male portrait.svg",
"Nocover-upload.png",
"NoDVDcover copy.png",
"Noribbon.svg",
"No portrait-BFD-test.svg",
"Placeholder barnstar ribbon.png",
"Project Trains no image.png",
"Image-request.png",
"Sin bandera.svg",
"Sin escudo.svg",
"Replace this image - temple.png",
"Replace this image butterfly.png",
"Replace this image.svg",
"Replace this image1.svg",
"Resolution angle.png",
"Image-No portrait-text-BFD-test.svg",
"Insert image here.svg",
"No image available.png",
"NO IMAGE YET square.png",
"NO IMAGE YET.png",
"No Photo Available.svg",
"No Screenshot.svg",
"No-image-available.jpg",
"Null.png",
"PictureNeeded.gif",
"Place holder.jpg",
"Unbenannt.JPG",
"UploadACopyrightFreeImage.svg",
"UploadAnImage.gif",
"UploadAnImage.svg",
"UploadAnImageShort.svg",
"CarersLogo.gif",
"Diagram Needed.svg",
"No male portrait.svg",
"NoDVDcover copy.png",
"Placeholder barnstar ribbon.png",
"Project Trains no image.png",
"Image-request.png",
"Noimage.gif",
}
local placeholder_image = {}
for _, val in ipairs(placeholderList) do
placeholder_image[val] = true
end
local categories = {
url_image_links = "[[ໝວດ:ໜ້າທີ່ໃຊ້ກ່ອງຂໍ້ມູນທີ່ມີຢູອາແອລໃນພາຣາມິເຕີພາບ]]",
thumbnail_images = "[[ໝວດ:ໜ້າທີ່ໃຊ້ກ່ອງຂໍ້ມູນທີ່ມີພາບຂະໜາດຫຍໍ້]]",
}
return { placeholder_image = placeholder_image, categories = categories }
fcbsd9eiohwfjenjq0f366za7g408b4
ແມ່ແບບ:Infobox person/weight
10
25140
129392
2026-07-29T09:03:01Z
Khomphoi28
15846
ສ້າງໜ້າດ້ວຍ "{{#invoke:Person weight|weight}}<noinclude> {{Documentation}} </noinclude>"
129392
wikitext
text/x-wiki
{{#invoke:Person weight|weight}}<noinclude>
{{Documentation}}
</noinclude>
7snazlqrivtbqwgqj1mvdsz5r9nkbgl
ແມ່ແບບ:Four digit
10
25141
129394
2026-07-29T09:10:28Z
Khomphoi28
15846
ສ້າງໜ້າດ້ວຍ "{{ #ifexpr: ({{{1|0}}} > 999.5) | {{{1|0}}} | {{ #ifexpr: ({{{1|0}}} > 99.5) | 0{{#expr:{{{1|0}}}}} | {{ #ifexpr: ({{{1|0}}} > 9.5) | 00{{#expr:{{{1|0}}}}} | 000{{#expr:{{{1|0}}}}} }} }} }}<noinclude> [[ໝວດ:ແມ່ແບບຈັດຮູບແບບວິກິພີເດຍ|{{PAGENAME}}]]</noinclude>"
129394
wikitext
text/x-wiki
{{ #ifexpr: ({{{1|0}}} > 999.5) | {{{1|0}}} |
{{ #ifexpr: ({{{1|0}}} > 99.5) | 0{{#expr:{{{1|0}}}}} |
{{ #ifexpr: ({{{1|0}}} > 9.5) | 00{{#expr:{{{1|0}}}}} | 000{{#expr:{{{1|0}}}}}
}} }} }}<noinclude>
[[ໝວດ:ແມ່ແບບຈັດຮູບແບບວິກິພີເດຍ|{{PAGENAME}}]]</noinclude>
6fmb3rpl35u9bdz2gbee9vcklwdrggm
Module:Wd/i18n
828
25142
129395
2026-07-29T09:20:09Z
Khomphoi28
15846
ສ້າງໜ້າດ້ວຍ "-- ຄຳທີ່ຢູ່ໃນໜ້ານີ້ຈະເປັນຄຳທີ່ໃຊ້ສະແດງຜົນສຳລັບ [[ແມ່ແບບ:ວິກິດາຕ້າ]] local p = {} function p.init(aliasesP) p = { ["version"] = "8", -- increment this each time the below parameters are changed to avoid reference conflict errors ["errors"] = { ["unknown-data-type"] = "'%s' ບໍ່ຮູ້ຈັກຊະນິດຂໍ..."
129395
Scribunto
text/plain
-- ຄຳທີ່ຢູ່ໃນໜ້ານີ້ຈະເປັນຄຳທີ່ໃຊ້ສະແດງຜົນສຳລັບ [[ແມ່ແບບ:ວິກິດາຕ້າ]]
local p = {}
function p.init(aliasesP)
p = {
["version"] = "8", -- increment this each time the below parameters are changed to avoid reference conflict errors
["errors"] = {
["unknown-data-type"] = "'%s' ບໍ່ຮູ້ຈັກຊະນິດຂໍ້ມູນ ຫຼື ບໍ່ຮອງຮັບ",
["missing-required-parameter"] = "ບໍ່ໄດ້ກຳນົດພາຣາມິເຕີທີ່ຈຳເປັນ ຕ້ອງມີຢ່າງໜ້ອຍໜຶ່ງ",
["extra-required-parameter"] = "ພາຣາມິເຕີ '%s' ຕ້ອງກຳນົດເປັນທາງເລືອກ",
["no-function-specified"] = "ທ່ານຕ້ອງລະບຸຟັງຊັນທີ່ຈະເອີ້ນໃຊ້", -- equal to the standard module error message
["main-called-twice"] = 'ຟັງຊັນ "main" ບໍ່ສາມາດເອີ້ນໃຊ້ຊໍ້າໄດ້',
["no-such-function"] = 'ຟັງຊັນ "%s" ບໍ່ມີຢູ່', -- equal to the standard module error message
["no-such-reference-template"] = 'Error: template "%s", which is set in %s as the output template for the citation-output type "%s", does not exist',
-- Parts of the error message signalling a malformed reference.
["malformed-reference-header"] = "<span style=\"color:#dd3333\">\nError: Unable to display the reference from Wikidata properly. Technical details:\n",
["malformed-reference-footer"] = "See [[Module:wd/doc#References|the documentation]] for further details.\n</span>\n[[Category:Module:Wd reference errors]]",
["template-failure-reason"] = "* Reason for the failure of {{tl|%s}}: %s\n",
["missing-mandatory-param"] = 'The output template call would miss the mandatory parameter <code>%s</code>.',
["unknown-property-in-ref"] = 'The Wikidata reference contains the property {{property|%s}}, which is not assigned to any parameter of this template.'
},
["info"] = {
["edit-on-wikidata"] = "ແດ້ໄຂໃນວິກິດາຕ້າ"
},
["numeric"] = {
["decimal-mark"] = ".",
["delimiter"] = ","
},
["datetime"] = {
["prefixes"] = {
["decade-period"] = "ໄລຍະທົດສະວັດທີ"
},
["suffixes"] = {
["decade-period"] = "ທົດສະວັດ ",
["millennium"] = "ສະຫັດສະວັດ ",
["century"] = "ສະຕະວັດ ",
["million-years"] = " ລ້ານປີ",
["billion-years"] = " ຕື້ປີ",
["year"] = " ປີ",
["years"] = " ປີ"
},
["julian-calendar"] = "ປະຕິທິນຈູລຽນ", -- linked page title
["julian"] = "ຈູລຽນ",
["BCE"] = "ກ່ອນ ສ.ສ",
["CE"] = "ສ.ສ",
["common-era"] = "ສາກົນສັກກະຫຼາດ" -- linked page title
},
["coord"] = {
["latitude-north"] = "N",
["latitude-south"] = "S",
["longitude-east"] = "E",
["longitude-west"] = "W",
["degrees"] = "°",
["minutes"] = "'",
["seconds"] = '"',
["separator"] = ", "
},
["values"] = {
["unknown"] = "ຄ່າທີ່ບໍ່ຮູ້ຈັກ",
["none"] = "ບໍ່ພົບ"
},
["cite"] = {
["output-types"] = {"web", "q"}, -- In this order, the output types will be tried
["param-mapping"] = {
["web"] = {
-- <= left side: all allowed reference properties for *web page sources* per https://www.wikidata.org/wiki/Help:Sources
-- => right side: corresponding parameter names in (equivalent of) [[:en:Template:Cite web]] (if non-existent, keep empty i.e. "")
[aliasesP.statedIn] = "website",
[aliasesP.referenceURL] = "url",
[aliasesP.publicationDate] = "date",
[aliasesP.lastUpdate] = "date",
[aliasesP.retrieved] = "access-date",
[aliasesP.title] = "title",
[aliasesP.subjectNamedAs] = "title",
[aliasesP.archiveURL] = "archive-url",
[aliasesP.archiveDate] = "archive-date",
[aliasesP.language] = "language",
[aliasesP.author] = "author",
[aliasesP.authorNameString] = "author",
[aliasesP.publisher] = "publisher",
[aliasesP.quote] = "quote",
[aliasesP.pages] = "pages", -- extra option
[aliasesP.publishedIn] = "website",
[aliasesP.sectionVerseOrParagraph] = "at"
},
["q"] = {
-- <= left side: all allowed reference properties for *sources other than web pages* per https://www.wikidata.org/wiki/Help:Sources
-- => right side: corresponding parameter names in (equivalent of) [[:en:Template:Cite Q]] (if non-existent, keep empty i.e. "")
[aliasesP.statedIn] = "1",
[aliasesP.pages] = "pages",
[aliasesP.column] = "at",
[aliasesP.chapter] = "chapter",
[aliasesP.sectionVerseOrParagraph] = "section",
["external-id"] = "id", -- used for any type of database property ID
[aliasesP.title] = "title",
[aliasesP.publicationDate] = "date",
[aliasesP.lastUpdate] = "date",
[aliasesP.retrieved] = "access-date"
}
},
["config"] = {
-- supported fields:
-- - template: name of the template used for output
-- - numbered-params: citation params accepting an arbitrary number of values by numbering the params (e.g. author1, author2)
-- - raw-value-params: params taking a raw value (which means the property is rendered with getValue with raw=true)
-- - mandatory-params: params that are required be in the template call (after potentially appending numbers to params listed in numbered-params)
-- - prioritization: table associating a list of properties, in the order in which they are preferred, to template parameters;
-- properties not mentioned here have the lowest priority;
-- prioritization of properties handled through additionalProcessedProperties is unsupported;
-- no key of this table can be from numbered-params
-- Leaving out the "template" field causes the output type to be ignored.
["web"] = {
["template"] = "Cite web/new",
["numbered-params"] = {"author"},
["mandatory-params"] = {"url"},
["prioritization"] = {
["date"] = {aliasesP.lastUpdate, aliasesP.publicationDate},
["title"] = {aliasesP.title, aliasesP.subjectNamedAs}
}
},
["q"] = {
["template"] = "Cite Q",
["raw-value-params"] = {"1"}, -- the first, unnamed parameter of CiteQ takes a QID, not the name of the item cited
["mandatory-params"] = {"1"},
["prioritization"] = {
["date"] = {aliasesP.lastUpdate, aliasesP.publicationDate}
}
}
}
}
}
p.getOrdinalSuffix = function(num)
if tostring(num):sub(-2,-2) == '1' then
return "th" -- 10th, 11th, 12th, 13th, ... 19th
end
num = tostring(num):sub(-1)
if num == '1' then
return "st"
elseif num == '2' then
return "nd"
elseif num == '3' then
return "rd"
else
return "th"
end
end
p.addDelimiters = function(n)
local left, num, right = string.match(n, "^([^%d]*%d)(%d*)(.-)$")
if left and num and right then
return left .. (num:reverse():gsub("(%d%d%d)", "%1" .. p['numeric']['delimiter']):reverse()) .. right
else
return n
end
end
return p
end
return p
itmcbdqkd26f1kfx052l6ga8fjrsy83
ແມ່ແບບ:ກ່ອງຂໍ້ມູນ ນັກມວຍປໍ້າ/doc
10
25143
129396
2026-07-29T09:29:47Z
Khomphoi28
15846
ສ້າງໜ້າດ້ວຍ "{{ໜ້າຍ່ອຍຄູ່ມືການໃຊ້ງານ}} {{High-use}} {{uses infobox sportsperson|wrapped=1}} {{Lua|Module:Infobox|Module:InfoboxImage|Module:Check for unknown parameters|Module:Template wrapper}} {{Uses Wikidata|P18}} <!-- ໃສ່ໝວດດ້ານລຸ່ມສຸດ ສ່ວນລິ້ງຂ້າມພາສາໃຫ້ໃຊ້ວິກິດາຕ້າ --> '''ກ່ອງຂໍ້ມູນ ນັກມວຍປ..."
129396
wikitext
text/x-wiki
{{ໜ້າຍ່ອຍຄູ່ມືການໃຊ້ງານ}}
{{High-use}}
{{uses infobox sportsperson|wrapped=1}}
{{Lua|Module:Infobox|Module:InfoboxImage|Module:Check for unknown parameters|Module:Template wrapper}}
{{Uses Wikidata|P18}}
<!-- ໃສ່ໝວດດ້ານລຸ່ມສຸດ ສ່ວນລິ້ງຂ້າມພາສາໃຫ້ໃຊ້ວິກິດາຕ້າ -->
'''ກ່ອງຂໍ້ມູນ ນັກມວຍປໍ້າ''' ໃຊ້ເພື່ອສະແດງສະຖິຕິ ແລະ ຂໍ້ມູນຂອງ[[ນັກມວຍປໍ້າອາຊີບ|ນັກມວຍປໍ້າ]]
== ວິທີໃຊ້ ==
ທ່ານສາມາດຄັດລອກໂຄ້ດດ້ານລຸ່ມແລ້ວນຳໄປວາງໃນບົດຄວາມ ແລ້ວເພີ່ມລາຍລະອຽດໃນເວລາຕໍ່ມາ
{{Parameter names example <!-- | child | header-color --> | name | image | image_size | image_upright | landscape | alt | caption | birth_name | birthname | birth_date | birth_place | death_date | death_place | death_cause | alma_mater | alma mater | spouse | partner | children | parents | relatives | family | website | ring_names | names | height | weight | billed | trainer | debut | retired | signature | signature_size | signature_alt }}
<syntaxhighlight lang="wikitext" style="overflow: auto;">
{{Infobox professional wrestler
| name =
| image =
| image_size =
| image_upright =
| landscape = <!-- yes, if wide image, otherwise leave blank -->
| alt = <!-- descriptive text for use by speech synthesis (text-to-speech) software -->
| caption =
| birth_name =
| birth_date = <!-- {{Birth date and age|YYYY|MM|DD}} or {{Birth date|YYYY|MM|DD}} if deceased. For living people supply only the year unless the exact date is already WIDELY published, as per [[WP:DOB]]. -->
| birth_place =
| death_date = <!-- {{Death date and age|YYYY|MM|DD|YYYY|MM|DD}} or {{Death date|YYYY|MM|DD}} if birth date unknown -->
| death_place =
| death_cause = <!-- should only be included when the cause of death has significance for the subject's notability -->
| alma_mater =
| spouse = <!-- {{Marriage|NAME|DATE}} or {{Marriage|NAME|DATE|ENDDATE}} -->
| partner = <!-- unmarried long-term partner -->
| children =
| parents =
| relatives =
| family =
| website = <!-- {{URL|google.com}} -->
| ring_names =
| height = <!-- "X ft Y in" or "X cm"; conversions are automatic -->
| weight = <!-- "X lb", "X kg" or "X st"; conversions are automatic -->
| billed =
| trainer =
| debut =
| retired =
}}
</syntaxhighlight>
== ພາຣາມິເຕີ ==
{| class="wikitable"
! style="text-align: left" | ພາຣາມິເຕີ
! style="text-align: left" | ຄຳອະທິບາຍ
|-
| '''name'''
| The article name, without qualifiers, i.e. John Doe, not John Doe (wrestler).
|-
| '''image'''
| Image defaults to 220px width.
|-
| '''image_size'''
| Size to display image (e.g. 200px (for width), x300px (for height), or 200x300px). This parameter should not normally need to be set.
|-
| '''image_upright'''
| Scales the image thumbnail from its default size by the given factor. Values less than 1 scale the image down (0.9 = 90%) and values greater than 1 scale the image up (1.15 = 115%).
|-
| '''landscape'''
| Set to "yes" when using wide, short images. The image height (rather than width) will be limited to 200 pixels.
|-
| '''alt'''
| Alternative text for image. See [[WP:ALT]] for more details.
|-
| '''caption'''
| Image caption. Try to include the year of the photo.
|-
| '''birth_name'''
| Birth name, if different from {{para|name}}.
|-
| '''birth_date'''
| Date of birth. If living, use {{tl|Birth date and age}}, otherwise use {{tl|Birth date}}. For living people supply only the year unless the exact date is already WIDELY published, as per [[WP:DOB]]. Treat such cases as if only the year is known, so use {{tl|birth year and age}} or a similar option.
|-
| '''birth_place'''
| Place of birth.
|-
| '''death_date'''
| Date of death. If date of birth is known, use {{tl|Death date and age}}, otherwise use {{tl|Death date}}.
|-
| '''death_place'''
| Place of death.
|-
| '''death_cause'''
| Cause of death. Should be clearly defined and sourced.
|-
| '''alma_mater'''
| Universities/colleges from which the wrestler graduated. Leave empty if none.
|-
| '''spouse'''
| Name(s) of spouse(s) and years of marriage. Use {{tl|Marriage}}.
|-
| '''partner'''
| Name(s) of notable unmarried long-term partners and years of relationship.
|-
| '''children'''
| Number of children (e.g. 3), or list names if independently notable. Use {{tl|Plainlist}} for multiple entries.
|-
| '''parents'''
| Names of parents; include only if they are independently notable. These parameter may be used for biological, adoptive, foster, or step-parents. Use {{tl|Plainlist}} for multiple entries.
|-
| '''mother'''
| Name of mother; include only if the subject's mother is independently notable. Overridden by {{para|parents}}.
|-
| '''father'''
| Name of father; include only if the subject's father is independently notable. Overridden by {{para|parents}}.
|-
| '''relatives'''
| Names of siblings or other relatives; include only if independently notable. Include the relationship in parentheses after the name (sister, uncle, etc.). Use {{tl|Plainlist}} for multiple entries.
|-
| '''family'''
| Link to family article, if applicable. See [[list of family relations in professional wrestling]].
|-
| '''website'''
| '''Official''' website. Note this is not to be used for profile pages on wrestling websites, [[social media]] pages or fansites. Use {{tl|URL}}.
|-
| '''ring_names'''
| Known [[ring name]]s. Use '''bold''' print on active names. Use {{tl|Plainlist}} for multiple entries.
|-
| '''height'''
| [[Kayfabe]] height at which the wrestler is billed. Automatically converted, but {{tl|Convert}} can also be used.
|-
| '''weight'''
| Kayfabe weight at which the wrestler is billed. Automatically converted, but {{tl|Convert}} can also be used.
|-
| '''billed'''
| Location billed by the promoter. Use {{tl|Plainlist}} for multiple entries.
|-
| '''trainer'''
| Name(s) of the individuals/schools that trained the wrestler. Use {{tl|Plainlist}} for multiple entries.
|-
| '''debut'''
| The date (or year if the exact date is unavailable) when the wrestler made their professional debut, i.e. wrestled their first match. For non-wrestlers, for example announcers or managers, this should be the date/year when they made their first appearance.
|-
| '''retired'''
| Date or year of ''permanent'' retirement.
|-
| '''signature'''
| An image of the person's signature. Please use image name without the {{samp|File:}} or {{samp|Image:}} prefix.
|-
| '''signature_size'''
| Default is 150px. If necessary, a signature can be resized manually as per the {{para|image_size}} parameter.
|-
| '''signature_alt'''
| Alt text for the signature image; spelling out the signature exactly as it appears in the image.
|}
<!--
=== Use as a child template ===
The '''child''' parameter is used when embedding this infobox into another.
{{Infobox person module documentation|Infobox professional wrestler|parameter=child}}
-->
== ຕົວຢ່າງ ==
{{Infobox professional wrestler
| name = Triple H
| image = Triple H at WM30.jpg
| caption = Triple H at [[WrestleMania XXX]] in 2014
| birth_name = Paul Michael Levesque
| birth_date = {{Birth date and age|1969|07|27}}
| birth_place = [[Nashua, New Hampshire]], U.S.
| spouse = {{Marriage|[[Stephanie McMahon]]|October 25, 2003}}
| children = 3
| family = [[McMahon family|McMahon]]
| ring_names = {{Plainlist|
* Hunter Hearst Helmsley
* Terra Ryzing
* '''Triple H'''
}}
| height = 6 ft 4 in
| weight = 255 lb
| billed = Greenwich, Connecticut
| trainer = [[Killer Kowalski]]
| debut = March 24, 1992
}}
<syntaxhighlight lang="wikitext" style="overflow: auto;">
{{Infobox professional wrestler
| name = Triple H
| image = Triple H at WM30.jpg
| caption = Triple H at [[WrestleMania XXX]] in 2014
| birth_name = Paul Michael Levesque
| birth_date = {{Birth date and age|1969|07|27}}
| birth_place = [[Nashua, New Hampshire]], U.S.
| spouse = {{Marriage|[[Stephanie McMahon]]|October 25, 2003}}
| children = 3
| family = [[McMahon family|McMahon]]
| ring_names = {{Plainlist|
* Hunter Hearst Helmsley
* Terra Ryzing
* '''Triple H'''
}}
| height = 6 ft 4 in
| weight = 255 lb
| billed = Greenwich, Connecticut
| trainer = [[Killer Kowalski]]
| debut = March 24, 1992
}}
</syntaxhighlight>
== ໝວດຕິດຕາມ ==
* {{clc|ໜ້າທີ່ໃຊ້ກ່ອງຂໍ້ມູນນັກມວຍປໍ້າທີ່ມີພາຣາມິເຕີທີ່ບໍ່ຮູ້ຈັກ}}
== ເບິ່ງຕື່ມ ==
* {{tl|ກ່ອງຂໍ້ມູນ ນັກມວຍປໍ້າມືສະໝັກຫຼິ້ນ}}
<includeonly>{{Sandbox other||
<!-- Categories below this line, please; interwikis at Wikidata -->
[[ໝວດ:ແມ່ແບບຂໍ້ມູນມວຍປໍ້າອາຊີບ|ນັກມວຍປໍ້າ]]
[[ໝວດ:Sportsperson infobox templates|ນັກມວຍປໍ້າ]]
[[ໝວດ:Biographical templates usable as a module|ນັກມວຍປໍ້າ]]
[[ໝວດ:ແມ່ແບບກ່ອງຂໍ້ມູນທີ່ໃຊ້ຂໍ້ມູນຈາກວິກິດາຕ້າ]]
[[ໝວດ:ແມ່ແບບທີ່ເພີ່ມໝວດຕິດຕາມ]]
}}</includeonly>
fyt0k1mdnywevphh8ljfqt0yv288l7j
ແມ່ແບບ:Uses Wikidata
10
25144
129399
2026-07-29T09:38:28Z
Khomphoi28
15846
ສ້າງໜ້າດ້ວຍ "{{Sister project | position = {{{position|}}} | project = data | text = {{module other|ມໍດູນ|ແມ່ແບບ}}ນີ້ໃຊ້{{#if:{{{section|}}} |ໜຶ່ງ ຫຼື ຫຼາຍຄ່າຄຸນລັກສະນະຈາກ[[ວິກິດາຕ້າ]] ເບິ່ງຕື່ມທີ່ [[#{{{section}}}|§ {{{section}}}]] ສຳລັບລາຍລະອຽດເພີ່ມເຕີມ | ຄ່າຄຸນລັກ..."
129399
wikitext
text/x-wiki
{{Sister project
| position = {{{position|}}}
| project = data
| text = {{module other|ມໍດູນ|ແມ່ແບບ}}ນີ້ໃຊ້{{#if:{{{section|}}} |ໜຶ່ງ ຫຼື ຫຼາຍຄ່າຄຸນລັກສະນະຈາກ[[ວິກິດາຕ້າ]] ເບິ່ງຕື່ມທີ່ [[#{{{section}}}|§ {{{section}}}]] ສຳລັບລາຍລະອຽດເພີ່ມເຕີມ | ຄ່າຄຸນລັກສະນະຈາກ[[ວິກິດາຕ້າ]]:
{{#invoke:Uses Wikidata|usesProperty}}
}}}}{{#switch:{{SUBPAGENAME}}
|sandbox |testcases |doc= <!--no category-->
|#default={{#ifeq:{{PAGENAME}} |Uses Wikidata ||{{module other |[[ໝວດ:ມໍດູນໃຊ້ງານຂໍ້ມູນຈາກວິກິດາຕ້າ]] |{{template other |[[ໝວດ:ແມ່ແບບໃຊ້ງານຂໍ້ມູນຈາກວິກິດາຕ້າ]]]}} }} }}
}}<!--
--><noinclude>{{documentation}}</noinclude>
jir3p7htyss4fwoovmdk91itji9lqa1
Module:Uses Wikidata
828
25145
129400
2026-07-29T09:40:11Z
Khomphoi28
15846
ສ້າງໜ້າດ້ວຍ "local p = {} function p.usesProperty(frame) local args = frame.getParent(frame).args or nil if mw.text.trim(args[1] or '') == '' then args = frame.args end local result = '<ul>' local ii = 1 while true do local p_num = mw.text.trim(args[ii] or '') if p_num ~= '' then local label = mw.wikibase.getLabel(p_num) or "NO LABEL" result = result .. "<li>[[File:Disc Plain blue dark.svg|middle|4px|link=|alt=]] <b><i>[[d:Property talk:" .. p_num ...."
129400
Scribunto
text/plain
local p = {}
function p.usesProperty(frame)
local args = frame.getParent(frame).args or nil
if mw.text.trim(args[1] or '') == '' then
args = frame.args
end
local result = '<ul>'
local ii = 1
while true do
local p_num = mw.text.trim(args[ii] or '')
if p_num ~= '' then
local label = mw.wikibase.getLabel(p_num) or "NO LABEL"
result = result .. "<li>[[File:Disc Plain blue dark.svg|middle|4px|link=|alt=]] <b><i>[[d:Property talk:" .. p_num .. "|" .. label .. " (" .. string.upper(p_num) .. ")]]</i></b> (ເບິ່ງຕື່ມທີ່<span class='plainlinks'>[https://query.wikidata.org/embed.html#SELECT%20%3FWikidata_item_%20%3FWikidata_item_Label%20%3Fvalue%20%3FvalueLabel%20%3FThai_Wikipedia_article%20%23Show%20data%20in%20this%20order%0A%7B%0A%09%3FWikidata_item_%20wdt%3A" .. p_num .. "%20%3Fvalue%20.%20%23Collecting%20all%20items%20which%20have%20" .. p_num .. "%20data%2C%20from%20whole%20Wikidata%20item%20pages%0A%09OPTIONAL%20%7B%3FThai_Wikipedia_article%20schema%3Aabout%20%3FWikidata_item_%3B%20schema%3AisPartOf%20%3Chttps%3A%2F%2Fth.wikipedia.org%2F%3E%20.%7D%20%23If%20collected%20item%20has%20link%20to%20Thai%20Wikipedia%2C%20show%20that%0A%09SERVICE%20wikibase%3Alabel%20%7B%20bd%3AserviceParam%20wikibase%3Alanguage%20%22th%22%20%20%7D%20%23Show%20label%20in%20this%20language.%20%22th%22%20is%20Thai.%20%20%20%0A%7D%0ALIMIT%201000 ຈຳນວນການໃຊ້]</span>)</li>"
ii = ii + 1
else break
end
end
result = result.."</ul>"
return result
end
function p.tuProperty(frame)
local parent = frame.getParent(frame)
local result = '<ul>'
local ii = 1
while true do
local p_num = mw.text.trim(parent.args[ii] or '')
if p_num ~= '' then
local label = mw.wikibase.getLabel(p_num) or "NO LABEL"
result = result .. "<li><span style='font-size:90%;line-height:1;'>●</span> <b>[[d:Property:" .. p_num .. "|" .. label .. "]]</b> <span style='font-size:90%;'>([[d:Property talk:" .. string.upper(p_num) .. "|" .. p_num .. "]])</span></li>"
ii = ii + 1
else break
end
end
result = result.."</ul>"
return result
end
return p
kr7nzse8t3xjo1kuzqm95tn3k0t5nph
129402
129400
2026-07-29T09:43:56Z
Khomphoi28
15846
129402
Scribunto
text/plain
require('strict');
local error_msg = '<span style=\"font-size:100%\" class=\"error\"><code style=\"color:inherit; border:inherit; padding:inherit;\">|_template=</code> ບໍ່ມີ ຫຼື ວ່າງ</span>';
--[[--------------------------< I S _ I N _ T A B L E >--------------------------------------------------------
scan through tbl looking for value; return true if found, false else
]]
local function is_in_table (tbl, value)
for k, v in pairs (tbl) do
if v == value then return true end
end
return false;
end
--[[--------------------------< A D D _ P A R A M E T E R >----------------------------------------------------
adds parameter name and its value to args table according to the state of boolean list argument; kv pair for
template execution; k=v string for template listing.
]]
local function add_parameter (k, v, args, list)
if list then
table.insert( args, table.concat ({k, '=', v})); -- write parameter names and values to args table as string
else
args[k] = v; -- copy parameters to args table
end
end
--[[--------------------------< A L I A S _ M A P _ G E T >----------------------------------------------------
returns a table of local template (parent frame) parameter names and the target template names that match where
in [key]=<value> pairs where:
[key] is local template parameter name (an alias)
<value> is target template parameter name (the canonical parameter name used in the working template)
The parameter |_alias-map= has the form:
|_alias-map=<list>
where <list> is a comma-separated list of alias / canonical parameter name pairs in the form
<from> : <to>
where:
<from> is the local template's parameter name (alias)
<to> is the target template's parameter name (canonical)
for enumerated parameters place an octothorp (#) where the enumerator digits are placed in the parameter names:
<from#> : <to#>
]]
local function alias_map_get (_alias_map)
local T = mw.text.split (_alias_map, '%s*,%s*'); -- convert the comma-separated list into a table of alias pairs
local mapped_aliases = {}; -- mapped aliases will go here
local l_name, t_name; -- parameter names
for _, alias_pair in ipairs (T) do -- loop through the table of alias pairs
l_name, t_name = alias_pair:match ('(.-)%s*:%s*(.+)'); -- from each pair, get local and target parameter names
if l_name and t_name then -- if both are set
if tonumber (l_name) then
l_name = tonumber (l_name); -- convert number-as-text to a number
end
mapped_aliases[l_name] = t_name; -- add them to the map table
end
end
return mapped_aliases;
end
--[[--------------------------< F R A M E _ A R G S _ G E T >--------------------------------------------------
Fetch the wrapper template's 'default' and control parameters; adds default parameters to args
returns content of |_template= parameter (name of the working template); nil else
]]
local function frame_args_get (frame_args, args, list)
local template;
for k, v in pairs (frame_args) do -- here we get the wrapper template's 'default' parameters
if 'string' == type (k) and (v and ('' ~= v)) then -- do not pass along positional or empty parameters
if '_template' == k then
template = v; -- save the name of template that we are wrapping
elseif '_exclude' ~= k and '_reuse' ~= k and '_include-positional' ~= k and '_alias-map' ~= k then -- these already handled so ignore here;
add_parameter (k, v, args, list); -- add all other parameters to args in the style dictated by list
end
end
end
return template; -- return contents of |_template= parameter
end
--[=[--------------------------< P F R A M E _ A R G S _ G E T >------------------------------------------------
Fetches the wrapper template's 'live' parameters; adds live parameters that aren't members of the exclude table to
args table; positional parameters may not be excluded
no return value
]=]
local function pframe_args_get (pframe_args, args, exclude, _include_positional, list)
for k, v in pairs (pframe_args) do
if 'string' == type (k) and not is_in_table (exclude, k) then -- do not pass along excluded parameters
if v and ('' ~= v) then -- pass along only those parameters that have assigned values
if 'unset' == v:lower() then -- special keyword to unset 'default' parameters set in the wrapper template
v = ''; -- unset the value in the args table
end
add_parameter (k, v, args, list) -- add all other parameters to args in the style dictated by list; alias map only supported for local-template parameters
end
end
end
if _include_positional then
for i, v in ipairs (pframe_args) do -- pass along positional parameters
if 'unset' == v:lower() then -- special keyword to unset 'default' parameters set in the wrapper template
v = ''; -- unset the value in the args table
end
add_parameter (i, v, args, list);
end
end
end
--[[--------------------------< _ M A I N >--------------------------------------------------------------------
Collect the various default and live parameters into args styled according to boolean list.
returns name of the working or listed template or nil for an error message
]]
local function _main (frame, args, list)
local template;
local exclude = {}; -- table of parameter names for parameters that are not passed to the working template
local reuse_list = {}; -- table of pframe parameter names whose values are modified before they are passed to the working template as the same name
local alias_map = {}; -- table that maps parameter aliases to working template canonical parameter names
local _include_positional;
if frame.args._exclude and ('' ~= frame.args._exclude) then -- if there is |_exclude= and it's not empty
exclude = mw.text.split (frame.args._exclude, "%s*,%s*"); -- make a table from its contents
end
-- TODO: |_reuse= needs a better name (|_reuse=)
if frame.args._reuse and ('' ~= frame.args._reuse) then -- if there is |_reuse= and it's not empty
reuse_list = mw.text.split (frame.args._reuse, "%s*,%s*"); -- make a table from its contents
end
if frame.args['_alias-map'] and ('' ~= frame.args['_alias-map']) then -- if there is |_alias-map= and it's not empty
alias_map = alias_map_get (frame.args['_alias-map']); -- make a table from its contents
end
template = frame_args_get (frame.args, args, list); -- get parameters provided in the {{#invoke:template wrapper|...|...}}
if nil == template or '' == template then -- this is the one parameter that is required by this module
return nil; -- not present, tell calling function to emit an error message
end
_include_positional = 'yes' == frame.args['_include-positional']; -- when true pass all positional parameters along with non-excluded named parameters to ...
-- ... the working template; positional parameters are not excludable
local _pframe_args = frame:getParent().args; -- here we get the wrapper template's 'live' parameters from pframe.args
local pframe_args = {}; -- a local table that we can modify
for k, v in pairs (_pframe_args) do -- make a copy that we can modify
pframe_args[k] = v;
end
-- here we look for pframe parameters that are aliases of canonical parameter names; when found
-- we replace the alias with the canonical. We do this here because the reuse_list works on
-- canonical parameter names so first we convert alias parameter names to canonical names and then
-- we remove those canonical names from the pframe table that are reused (provided to the working
-- template through the frame args table)
for k, v in pairs (alias_map) do -- k is alias name, v is canonical name
if pframe_args[k] then -- if pframe_args has parameter with alias name
pframe_args[v] = _pframe_args[k]; -- create new canonical name with alias' value
pframe_args[k] = nil; -- unset the alias
end
end
for k, v in pairs (pframe_args) do -- do enumerated parameter alias -> canonical translation
if 'string' == type (k) then -- only named parameters can be enumerated
if alias_map[k..'#'] then -- non-enumerated alias matches enumerated parameter pattern? enumerator at end only
pframe_args[alias_map[k..'#']:gsub('#', '')] = v; -- remove '#' and copy parameter to pframe_args table
pframe_args[k] = nil; -- unset the alias
elseif k:match ('%d+') then -- if this parameter name contains digits
local temp = k:gsub ('%d+', '#'); -- make a copy; digits replaced with single '#'
local enum = k:match ('%d+'); -- get the enumerator
if alias_map[temp] then -- if this parameter is a recognized enumerated alias
pframe_args[alias_map[temp]:gsub('#', enum)] = v; -- use canonical name and replace '#' with enumerator and add to pframe_args
pframe_args[k] = nil; -- unset the alias
end
end
end
end
-- pframe parameters that are _reused are 'reused' have the form something like this:
-- |chapter=[[wikisource:{{{chapter}}}|{{{chapter}}}]]
-- where a parameter in the wrapping template is modified and then passed to the working template
-- using the same parameter name (in this example |chapter=)
-- remove parameters that will be reused
for k, v in ipairs (reuse_list) do -- k is numerical index, v is canonical parameter name to ignore
if pframe_args[v] then -- if pframe_args has parameter that should be ignored
pframe_args[v] = nil; -- unset the ignored parameter
end
end
pframe_args_get (pframe_args, args, exclude, _include_positional, list); -- add parameters and values to args that are not listed in the exclude table
return template; -- args now has all default and live parameters, return working template name
end
--[[--------------------------< W R A P >----------------------------------------------------------------------
Template entry point. Call this function to 'execute' the working template
]]
local function wrap (frame)
local args = {}; -- table of default and live parameters and their values to be passed to the wrapped template
local template; -- the name of the working template
template = _main (frame, args, false); -- get default and live parameters and the name of the working template
if not template then -- template name is required
return error_msg; -- emit error message and abandon if template name not present
end
return frame:expandTemplate {title=template, args=args}; -- render the working template
end
--[[--------------------------< L I S T >----------------------------------------------------------------------
Template entry point. Call this function to 'display' the source for the working template. This function added
as a result of a TfD here: Wikipedia:Templates_for_discussion/Log/2018_April_28#Module:PassArguments
This function replaces a similarly named function which was used in {{cite compare}} and {{cite compare2}}
Values in the args table are numerically indexed strings in the form 'name=value'
]]
local function list(frame, do_link)
local args = {}; -- table of default and live parameters and their values to be passed to the listed template
local template; -- the name of the listed template
template = _main (frame, args, true); -- get default and live parameters and the name of the listed template
if not template then -- template name is required
return error_msg; -- emit error message and abandon if template name not present
end
if do_link then
template = ('[[%s|%s]]'):format(frame:expandTemplate{ title='Transclude', args = {template} }, template)
end
table.sort(args)
for i = 1, #args do
local stripped = args[i]:match('^' .. i .. '=([^=]*)$')
if stripped then args[i] = stripped else break end
end
return frame:preprocess(table.concat({
'<code style="color:inherit; background:inherit; border:none;">{{',
template,
('<wbr><nowiki>|%s</nowiki>'):rep(#args):format(unpack(args)), '}}</code>'})); -- render the template
end
local function link (frame)
return list(frame, true)
end
--[[--------------------------< E X P O R T E D F U N C T I O N S >------------------------------------------
]]
return {
link = link,
list = list,
wrap = wrap,
};
n0nb9700tudhcyg5r8wxiyv7mis7upz
ແມ່ແບບ:Invoke
10
25146
129405
2026-07-29T09:54:13Z
Khomphoi28
15846
ສ້າງໜ້າດ້ວຍ "<includeonly>{{#invoke:LuaCall|invoke}}</includeonly><noinclude>{{ຄູ່ມືການໃຊ້ງານ}}</noinclude>"
129405
wikitext
text/x-wiki
<includeonly>{{#invoke:LuaCall|invoke}}</includeonly><noinclude>{{ຄູ່ມືການໃຊ້ງານ}}</noinclude>
6oj417tgyw400rukeydih22qjsezg7g
Module:LuaCall
828
25147
129406
2026-07-29T09:56:36Z
Khomphoi28
15846
ສ້າງໜ້າດ້ວຍ "local p={} function p.main(frame) local parent=frame.getParent(frame) or {} local reserved_value={} local reserved_function,reserved_contents for k,v in pairs(parent.args or {}) do _G[k]=tonumber(v) or v -- transfer every parameter directly to the global variable table end for k,v in pairs(frame.args or {}) do _G[k]=tonumber(v) or v -- transfer every parameter directly to the global variable table end ---..."
129406
Scribunto
text/plain
local p={}
function p.main(frame)
local parent=frame.getParent(frame) or {}
local reserved_value={}
local reserved_function,reserved_contents
for k,v in pairs(parent.args or {}) do
_G[k]=tonumber(v) or v -- transfer every parameter directly to the global variable table
end
for k,v in pairs(frame.args or {}) do
_G[k]=tonumber(v) or v -- transfer every parameter directly to the global variable table
end
--- Alas Scribunto does NOT implement coroutines, according to
--- http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#string.format
--- this will not stop us from trying to implement one single lousy function call
if _G[1] then
reserved_function,reserved_contents=mw.ustring.match(_G[1],"^%s*(%a[^%s%(]*)%(([^%)]*)%)%s*$")
end
if reserved_contents then
local reserved_counter=0
repeat
reserved_counter=reserved_counter+1
reserved_value[reserved_counter]=_G[mw.ustring.match(reserved_contents,"([^%,]+)")]
reserved_contents=mw.ustring.match(reserved_contents,"[^%,]+,(.*)$")
until not reserved_contents
end
local reserved_arraypart=_G
while mw.ustring.match(reserved_function,"%.") do
reserved_functionpart,reserved_function=mw.ustring.match(reserved_function,"^(%a[^%.]*)%.(.*)$")
reserved_arraypart=reserved_arraypart[reserved_functionpart]
end
local reserved_call=reserved_arraypart[reserved_function]
if type(reserved_call)~="function" then
return tostring(reserved_call)
else reserved_output={reserved_call(unpack(reserved_value))}
return reserved_output[reserved_return or 1]
end
end
local function tonumberOrString(v)
return tonumber(v) or v:gsub("^\\", "", 1)
end
local function pairs2ArrayWithFunc(f, ...)
local args = {}
for _, v in ... do
table.insert(args, f(v))
end
return args
end
local function pairs2Array(...)
local args = {}
for _, v in ... do
table.insert(args, v)
end
return args
end
--[[
------------------------------------------------------------------------------------
-- ipairsAtOffset
-- This is an iterator for arrays. It can be used like ipairs, but with
-- specified i as first index to iterate. i is an offset from 1
--
------------------------------------------------------------------------------------
--]]
local function ipairsAtOffset(t, i)
local f, s, i0 = ipairs(t)
return f, s, i0+i
end
local function get(s)
local G = _G; for _ in mw.text.gsplit(
mw.text.trim(s, '%s'), '%s*%.%s*'
) do
G = G[_]
end
return G
end
local function call(s, args, ret)
if ret then
return ({get(s)(unpack(args))})[tonumber(ret)]
end
return get(s)(unpack(args))
end
--[[
------------------------------------------------------------------------------------
-- call
--
-- This function is usually useful for debugging template parameters.
-- Prefix parameter with backslash (\) to force interpreting parameter as string.
-- The leading backslash will be removed before passed to Lua function.
--
-- Example:
-- {{#invoke:LuaCall|call|mw.log|a|1|2|3}} will return results of mw.log('a', 1, 2, 3)
-- {{#invoke:LuaCall|call|mw.logObject|\a|321|\321| \321 }} will return results of mw.logObject('a', 321, '321', ' \\321 ')
--
-- This example show the debugging to see which Unicode characters are allowed in template parameters,
-- {{#invoke:LuaCall|call|mw.ustring.codepoint|{{#invoke:LuaCall|call|mw.ustring.char|0x0061}}}} return 97
-- {{#invoke:LuaCall|call|mw.ustring.codepoint|{{#invoke:LuaCall|call|mw.ustring.char|0x0000}}}} return 65533
-- {{#invoke:LuaCall|call|mw.ustring.codepoint|{{#invoke:LuaCall|call|mw.ustring.char|0x0001}}}} return 65533
-- {{#invoke:LuaCall|call|string.format|0x%04x|{{#invoke:LuaCall|call|mw.ustring.codepoint|{{#invoke:LuaCall|call|mw.ustring.char|0x0002}}}}}} return 0xfffd
-- {{#invoke:LuaCall|call|string.format|0x%04x|{{#invoke:LuaCall|call|mw.ustring.codepoint|{{#invoke:LuaCall|call|mw.ustring.char|0x007e}}}}}} return 0x007e
-- {{#invoke:LuaCall|call|string.format|0x%04x|{{#invoke:LuaCall|call|mw.ustring.codepoint|{{#invoke:LuaCall|call|mw.ustring.char|0x007f}}}}}} return 0x007f
-- {{#invoke:LuaCall|call|string.format|0x%04x|{{#invoke:LuaCall|call|mw.ustring.codepoint|{{#invoke:LuaCall|call|mw.ustring.char|0x0080}}}}}} return 0x0080
-- {{#invoke:LuaCall|call|string.format|0x%04x|{{#invoke:LuaCall|call|mw.ustring.codepoint|{{#invoke:LuaCall|call|mw.ustring.char|0x00a0}}}}}} return 0x00a0
--
------------------------------------------------------------------------------------
--]]
function p.call(frame)
return call(frame.args[1],
pairs2ArrayWithFunc(tonumberOrString, ipairsAtOffset(frame.args, 1)),
frame.args['return']
)
end
--[[
------------------------------------------------------------------------------------
-- call_n
--
-- Like call(), but passing all arguments as number
------------------------------------------------------------------------------------
--]]
function p.call_n(frame)
return call(frame.args[1],
pairs2ArrayWithFunc(tonumber, ipairsAtOffset(frame.args, 1)),
frame.args['return']
)
end
--[[
------------------------------------------------------------------------------------
-- call_s
--
-- Like call(), but passing all arguments as string (no conversion)
------------------------------------------------------------------------------------
--]]
function p.call_s(frame)
-- unpack() not work on metatable
-- enclosing result in (), so that it will return only 1st element of result
--return (get(frame.args[1])(unpack(frame.args, 2)))
return call(frame.args[1],
pairs2Array(ipairsAtOffset(frame.args, 1)),
frame.args['return']
)
end
--local TableTools = require('Module:TableTools')
--[[
------------------------------------------------------------------------------------
-- get
--
-- Example:
-- {{#invoke:LuaCall|get| math.pi }} will return value of math.pi
-- {{#invoke:LuaCall|get|math|pi}} will return value of math.pi
-- {{#invoke:LuaCall|get| math |pi}} will return value of _G[' math '].pi
-- {{#invoke:LuaCall|get|_G| math.pi }} will return value of _G[' math.pi ']
-- {{#invoke:LuaCall|get|obj.a.5.c}} will return value of obj.a['5'].c
-- {{#invoke:LuaCall|get|obj|a|5|c}} will return value of obj.a[5].c
--
------------------------------------------------------------------------------------
--]]
function p.get(frame)
-- #frame.args always return 0, regardless of number of unnamed
-- template parameters, so check manually instead
if frame.args[2] == nil then
-- not do tonumber() for this args style,
-- always treat it as string,
-- so 'obj.1' will mean obj['1'] rather obj[1]
return get(frame.args[1])
else
local G = _G
for _, v in ipairs(frame.args) do
G = G[tonumberOrString(v)]
end
return G
end
end
--[[
------------------------------------------------------------------------------------
-- invoke
--
-- This function is used by Template:Invoke
--
------------------------------------------------------------------------------------
--]]
function p.invoke(frame)
local func
local offset
if frame.args[1] ~= nil then
local m = require('Module:' .. frame.args[1])
if frame.args[2] ~= nil then
func = m[frame.args[2]]
frame.args = frame:getParent().args
offset = 0
else
frame.args = frame:getParent().args
func = m[frame.args[1]]
offset = 1
end
else
frame.args = frame:getParent().args
func = require('Module:' .. frame.args[1])[frame.args[2]]
offset = 2
end
local args = {}
for _, v in ipairsAtOffset(frame.args, offset) do
table.insert(args, v)
end
frame.args = args
return func(frame)
end
return p
2hb8dwt27xmff2nojqxng0kd3omsd0a
Module:Lua class
828
25148
129407
2026-07-29T09:59:47Z
Khomphoi28
15846
ສ້າງໜ້າດ້ວຍ "local libraryUtil = require('libraryUtil') -- overridden for new types and exceptions local warn = require('Module:Warning') local mode_mt = {__mode='k'} local _classes, _instances = {}, {} -- registry mapping all private classes and instances to their internal counterparts setmetatable(_classes, mode_mt); setmetatable(_instances, mode_mt) local classes, instances = {}, {} -- same but public -> private setmetatable(classes, mode_mt); setmetatable(instanc..."
129407
Scribunto
text/plain
local libraryUtil = require('libraryUtil') -- overridden for new types and exceptions
local warn = require('Module:Warning')
local mode_mt = {__mode='k'}
local _classes, _instances = {}, {} -- registry mapping all private classes and instances to their internal counterparts
setmetatable(_classes, mode_mt); setmetatable(_instances, mode_mt)
local classes, instances = {}, {} -- same but public -> private
setmetatable(classes, mode_mt); setmetatable(instances, mode_mt)
local inst_private_mts, inst_public_mts = {}, {} -- for each class since they are mostly immutable
local una_metamethods = {__ipairs=1, __pairs=1, __tostring=1, __unm=1}
local bin_metamethods = {__add=1, __concat=1, __div=1, __eq=1, __le=1, __lt=1, __mod=1, __mul=1, __pow=1, __sub=1}
local oth_metamethods = {__call=1, __index=1, __newindex=1, __init=1}
local not_metamethods = {__name=1, __bases=1, __methods=1, __classmethods=1, __staticmethods=1, __normalmethods=1, __slots=1, __protected=1}
-- __class and __hash
local function objtostr(obj)
local copy = {}
for key, val in pairs(obj) do
copy[key] = type(val) == 'function' and 'function' or val
end
return mw.text.jsonEncode(copy, mw.text.JSON_PRETTY)
end
local inst_mt = {
__index = function (self, key)
if tonumber(key) or key == 'hash' or key == '__hash' then -- don't search numeric keys in classes and hash isn't inheritable
return nil
end
return self.__class[key] -- key could be invalid here without issues as __index(cls_private, key) would handle it
end,
__tostring = objtostr--
}
local function private_read(self_private, key)
return _instances[self_private][key] -- instance should be clean of invalid keys so that __index(cls_private, key) handles them
end
local function private_read_custom(self_private, key)
if not_metamethods[key] then
error(("AttributeError: unauthorized read attempt of internal '%s'"):format(key), 2)
end
local self = _instances[self_private]
local value = self.__class.__index(self_private, key) -- custom __index can handle invalid keys
if value == nil then
return self[key] -- same reason of private_read for not checking key validity
end
return value
end
local function private_write(self_private, key, value)
libraryUtil.checkTypeMultiForIndex(key, {'string', 'number'})
local self = _instances[self_private]
if type(key) == 'string' then
local cls = _classes[self.__class]
if cls.__normalmethods[key] or key:sub(1,2) == '__' and key ~= '__hash' then
error(("AttributeError: forbidden write attempt {%s: %s} to immutable method or invalid key"):format(key, tostring(value)), 2)
elseif key:find('[^_%w]') or key:find('^%d') then
error(("AttributeError: invalid attribute name '%s'"):format(key), 2)
elseif key == '__hash' and self.__hash ~= nil then
error("AttributeError: forbidden update attempt to immutable __hash", 2)
end
end
self[key] = value
end
local function private_write_custom(self_private, key, value)
local self = _instances[self_private]
local cls = _classes[self.__class]
local keyType = type(key)
if keyType == 'string' and (cls.__normalmethods[key] or key:sub(1,2) == '__' and key ~= '__hash') then
error(("AttributeError: forbidden write attempt {%s: %s} to immutable method or invalid key"):format(key, tostring(value)), 2)
end
if cls.__newindex(self_private, key, value) == false then -- custom __newindex can handle invalid keys
libraryUtil.checkTypeMultiForIndex(key, {'string', 'number'})
if keyType == 'string' then
if key:find('[^_%w]') or key:find('^%d') then
error(("AttributeError: invalid attribute name '%s'"):format(key), 2)
elseif key == '__hash' and self.__hash ~= nil then
error("AttributeError: forbidden update attempt to immutable __hash", 2)
end
end
self[key] = value
end
end
local function public_read(self_public, key)
if type(key) == 'string' and key:sub(1,1) == '_' then
error(("AttributeError: unauthorized read attempt of nonpublic '%s'"):format(key), 2)
end
return _instances[instances[self_public]][key] -- same reason of private_read...
end
local function public_read_custom(self_public, key)
if type(key) == 'string' and key:sub(1,1) == '_' then
error(("AttributeError: unauthorized read attempt of nonpublic '%s'"):format(key), 2)
end
local self = _instances[instances[self_public]]
local value = self.__class.__index(instances[self_public], key)
if value == nil then
return self[key] -- same reason of private_read...
end
return value
end
local function public_write(self_public, key, value)
local self = _instances[instances[self_public]]
local cls = _classes[self.__class]
if type(key) == 'string' then
if key:sub(1,1) == '_' then
error(("AttributeError: unauthorized write attempt of nonpublic {%s: %s}"):format(key, tostring(value)), 2)
elseif cls.__normalmethods[key] then
error(("AttributeError: forbidden write attempt {%s: %s} to immutable method"):format(key, tostring(value)), 2)
end
end
if self[key] == nil and not cls.__slots[key] then -- if instance and __slots are valid, no danger of creating invalid attributes
libraryUtil.checkTypeMultiForIndex(key, {'string', 'number'}) -- otherwise error message would not make sense
error(("AttributeError: public attribute creation attempt {%s: %s} not expected by __slots"):format(key, tostring(value)), 2)
end
self[key] = value
end
local function public_write_custom(self_public, key, value)
local self = _instances[instances[self_public]]
local cls = _classes[self.__class]
if type(key) == 'string' then
if key:sub(1,1) == '_' then
error(("AttributeError: unauthorized write attempt of nonpublic {%s: %s}"):format(key, tostring(value)), 2)
elseif cls.__normalmethods[key] then
error(("AttributeError: forbidden write attempt {%s: %s} to immutable method"):format(key, tostring(value)), 2)
end
end
if cls.__newindex(instances[self_public], key, value) == false then
if self[key] == nil and not cls.__slots[key] then
libraryUtil.checkTypeMultiForIndex(key, {'string', 'number'}) -- otherwise error message...
error(("AttributeError: public attribute creation attempt {%s: %s} not expected by __slots"):format(key, tostring(value)), 2)
end
self[key] = value
end
end
local function constructor(wrapper, ...)
if select('#', ...) ~= 1 or type(...) ~= 'table' then
error("SyntaxError: incorrect instance constructor syntax, should be: Class{arg1, arg2..., kw1=kwarg1, kw2=kwarg2...}", 2)
end
local self = {} -- __new
local cls_private = classes[wrapper] or wrapper
self.__class = cls_private
setmetatable(self, inst_mt)
local self_private = {} -- wrapper
local cls = _classes[cls_private]
local mt = inst_private_mts[cls]
if not mt then
mt = {}
mt.__index = cls.__index and private_read_custom or private_read
mt.__newindex = cls.__newindex and private_write_custom or private_write
for key in pairs(una_metamethods) do
mt[key] = cls[key]
end
mt.__call = cls.__call
mt.__metatable = "unauthorized access attempt of wrapper object metatable"
inst_private_mts[cls] = mt
end
setmetatable(self_private, mt)
_instances[self_private] = self
local __init = cls.__init
if __init and __init(self_private, ...) then
error("TypeError: __init must not return a var-list")
end
for key in pairs(cls.__methods) do
local func = cls[key] -- index once to save time in future calls
self[key] = function (...) return func(self_private, ...) end
end
if cls._hash then -- not inheritable
self.hash = function () return cls._hash(self_private) end
self.hash() -- construction of self is finalized at this point, so immutable hash can be safely set
end
local self_public = {}
mt = inst_public_mts[cls]
if not mt then
mt = {}
mt.__index = cls.__index and public_read_custom or public_read
mt.__newindex = cls.__newindex and public_write_custom or public_write
for key in pairs(una_metamethods) do
if cls[key] then
local func = cls[key]
mt[key] = function (a) return func(instances[a]) end
end
end
for key in pairs(bin_metamethods) do
if cls[key] then
local func = cls[key]
mt[key] = function (a, b) return func(instances[a], instances[b]) end
end
end
if cls.__call then
local func = cls.__call
mt.__call = function (self_public, ...) return func(instances[self_public], ...) end
end
mt.__metatable = "unauthorized access attempt of wrapper object metatable"
inst_public_mts[cls] = mt
end
setmetatable(self_public, mt)
instances[self_public] = self_private
return self_public, classes[wrapper] and nil or self_private -- so that constructions in private scopes have access to private instances
end
local function multi_inheritance(cls, key)
for _, base in ipairs(cls.__bases) do
if key:sub(1,1) ~= '_' or base.__protected[key] or key:sub(1,2) == '__' and key ~= '__name' and key ~= '__hash' then
local value = base[key]
if value ~= nil then
return value
end
end
end
end
local cls_mt = {
__index = multi_inheritance,
__tostring = objtostr--
}
local cls_private_mt = {
__call = constructor,
__index = function (cls_private, key)
if type(key) ~= 'string' then
warn(("AttributeWarning: index '%s' type should be string, %s given"):format(tostring(key), type(key)), 2)
elseif not_metamethods[key] then
error(("AttributeError: unauthorized read attempt of internal '%s'"):format(key), 2)
elseif key:find('[^_%w]') or key:find('^%d') then
warn(("AttributeWarning: index '%s' should be a valid Lua name"):format(key), 2)
end
local cls = _classes[cls_private]
local value = cls[key]
if not cls.__slots[key] then
local valueType = type(value)
if valueType == 'table' then
return mw.clone(value) -- because class attributes are immutable by default
elseif valueType == 'set' then --should list be clone or deep copy?
return value.copy()
end
end
return value
end,
__newindex = function (cls_private, key, value)
local cls = _classes[cls_private]
if not cls.__slots[key] and key ~= '__hash' then -- __slots should be valid, so no need to check key validity before
libraryUtil.checkTypeMultiForIndex(key, {'string'}) -- otherwise error message would not make sense
error(("AttributeError: write attempt {%s: %s} not expected by __slots"):format(key, tostring(value)), 2)
elseif key == '__hash' and cls.__hash ~= nil then
error("AttributeError: forbidden update attempt to immutable __hash", 2)
end
cls[key] = value
end,
__metatable = "unauthorized access attempt of wrapper object metatable"
}
local cls_public_mt = {
__call = constructor,
__index = function (cls_public, key)
if type(key) ~= 'string' then
warn(("AttributeWarning: index '%s' type should be string, %s given"):format(tostring(key), type(key)), 2)
elseif key:sub(1,1) == '_' then
error(("AttributeError: unauthorized read attempt of nonpublic '%s'"):format(key), 2)
elseif key:find('[^_%w]') or key:find('^%d') then
warn(("AttributeWarning: index '%s' should be a valid Lua name"):format(key), 2)
end
local value = _classes[classes[cls_public]][key]
local valueType = type(value)
if valueType == 'table' then
return mw.clone(value) -- all class attributes are immutable in the public scope
elseif valueType == 'set' then
return value.copy()
end
return value
end,
__newindex = function (cls_public, key, value)
libraryUtil.checkTypeMultiForIndex(key, {'string'}) -- otherwise error message...
error(("AttributeError: forbidden write attempt of {%s: %s}; a class is immutable in public scope"):format(key, tostring(value)), 2)
end,
__metatable = "unauthorized access attempt of wrapper object metatable"
}
local function default_hash(obj_private)
if obj_private.__hash == nil then -- not inheritable
obj_private.__hash = tonumber('0x' .. mw.hash.hashValue('fnv1a32', tostring(os.time() + math.random())))
end
return obj_private.__hash
end
function class(...)
local args = {...}
local cls = {} -- internal
local idx
if type(args[1]) == 'string' then
local __name = args[1]
if __name:find('%W') or __name:find('^%d') then
error(("ValueError: class '%s' must be a valid Lua name without '_'s"):format(__name), 2)
end
cls.__name = __name
idx = 2
else
idx = 1
end
cls.__bases = {}
for i = idx, #args-1 do
libraryUtil.checkType('class', i, args[i], 'class')
cls.__bases[#cls.__bases+1] = _classes[classes[args[i]]]
end
setmetatable(cls, cls_mt)
local kwargs = args[#args]
libraryUtil.checkType('class', #args, kwargs, 'table')
if kwargs.__name ~= nil or kwargs.__bases ~= nil then
error("ValueError: __name and unpacked __bases must be passed as optional first args to 'class'", 2)
end
cls.__slots = {}
local mt = {
__index = function (__slots, key) -- multi_inheritance
for _, base in ipairs(cls.__bases) do
if (key:sub(1,1) ~= '_' or base.__protected[key]) and base.__slots[key] then
return true
end
end
end
}
setmetatable(cls.__slots, mt)
if kwargs.__slots ~= nil then
libraryUtil.checkTypeForNamedArg('class', '__slots', kwargs.__slots, 'table')
for i, slot in ipairs(kwargs.__slots) do
libraryUtil.checkType('__slots', i, slot, 'string')
if slot:find('[^_%w]') or slot:find('^%d') then
error(("ValueError: invalid slot name '%s'"):format(slot), 2)
elseif slot:sub(1,2) == '__' then
error(("ValueError: slot '%s' has forbidden namespace"):format(slot), 2)
elseif rawget(cls.__slots, slot) then
warn(("ValueWarning: duplicated slot '%s'"):format(slot), 2)
elseif kwargs[slot] ~= nil or cls.__slots[slot] then
error(("ValueError: slot '%s' is predefined in class or allocated in __slots of bases"):format(slot), 2)
end
cls.__slots[slot] = true
end
kwargs.__slots = nil
end
cls.__protected = {}
mt = {
__index = function (__protected, key)
for _, base in ipairs(cls.__bases) do
if base.__protected[key] then
return true
end
end
end
}
setmetatable(cls.__protected, mt)
if kwargs.__protected ~= nil then
libraryUtil.checkTypeForNamedArg('class', '__protected', kwargs.__protected, 'table')
for i, key in ipairs(kwargs.__protected) do
libraryUtil.checkType('__protected', i, key, 'string')
if key:sub(1,1) ~= '_' or key:sub(2,2) == '_' then
error(("ValueError: the namespace of '%s' is not manually protectable"):format(key), 2)
elseif key == '_hash' then
error("ValueError: forbidden attempt to protect _hash which is not inheritable", 2)
elseif rawget(cls.__protected, key) then
warn(("ValueWarning: duplicated '%s' in __protected"):format(key), 2)
elseif cls.__protected[key] then
error(("ValueError: '%s' is already allocated in __protected of bases"):format(key), 2)
elseif kwargs[key] == nil then -- key validity will be checked further ahead
error(("ValueError: attempt to protect undefined '%s'"):format(key), 2)
end
cls.__protected[key] = true
end
kwargs.__protected = nil
end
if kwargs.__methods ~= nil then
error("ValueError: __classmethods and __staticmethods should be passed as optional attributes instead of __methods", 2)
elseif kwargs.hash ~= nil or kwargs.__hash ~= nil then
error("ValueError: forbidden attempt to define hash or __hash which are set internally", 2)
end
cls.__normalmethods = {} -- used in instance write methods
mt = {
__index = function (__normalmethods, key)
return cls.__methods[key] or cls.__classmethods[key] or cls.__staticmethods[key]
end
}
setmetatable(cls.__normalmethods, mt)
local cls_private = {} -- wrapper
setmetatable(cls_private, cls_private_mt)
_classes[cls_private] = cls
cls.__classmethods = {}
mt = {
__index = function (__classmethods, key)
for _, base in ipairs(cls.__bases) do
if (key:sub(1,1) ~= '_' or base.__protected[key]) and base.__classmethods[key] then
return true
end
end
end
}
setmetatable(cls.__classmethods, mt)
if kwargs.__classmethods ~= nil then
libraryUtil.checkTypeForNamedArg('class', '__classmethods', kwargs.__classmethods, 'table')
for i, key in ipairs(kwargs.__classmethods) do
libraryUtil.checkType('__classmethods', i, key, 'string')
if key:find('[^_%w]') or key:find('^%d') then
error(("ValueError: invalid classmethod name '%s'"):format(key), 2)
elseif key:sub(1,2) == '__' then
error(("ValueError: classmethod '%s' has forbidden namespace"):format(key), 2)
elseif key == '_hash' then
error("ValueError: invalid classmethod _hash, classes have their own hash classmethod", 2)
elseif rawget(cls.__classmethods, key) then
error(("ValueError: duplicated '%s' in __classmethods"):format(key), 2)
elseif not cls.__classmethods[key] and cls[key] ~= nil then
error(("ValueError: forbidden attempt to convert '%s' non-classmethod to classmethod"):format(key), 2)
end
libraryUtil.checkTypeForNamedArg('class', key, kwargs[key], 'function')
cls.__classmethods[key] = true
local func = kwargs[key]
cls[key] = function (...) return func(cls_private, ...) end
kwargs[key] = nil
end
kwargs.__classmethods = nil
end
cls.__normalmethods.hash = true
cls.hash = function () return default_hash(cls_private) end -- classes are always hashable so this is independent from _hash
cls.hash()
-- see https://docs.python.org/3/reference/datamodel.html#object.__hash__
if kwargs.__eq == nil then
if kwargs._hash then
warn("ValueWarning: _hash is defined but not __eq, which is expected", 2)
elseif kwargs._hash == false then
kwargs._hash = nil
else
kwargs._hash = default_hash
end
end
if kwargs._hash ~= nil then
libraryUtil.checkTypeForNamedArg('class', '_hash', kwargs._hash, 'function')
cls.__normalmethods._hash = true
cls._hash = kwargs._hash
kwargs._hash = nil
end
cls.__staticmethods = {}
mt = {
__index = function (__staticmethods, key)
for _, base in ipairs(cls.__bases) do
if (key:sub(1,1) ~= '_' or base.__protected[key]) and base.__staticmethods[key] then
return true
end
end
end
}
setmetatable(cls.__staticmethods, mt)
if kwargs.__staticmethods ~= nil then
libraryUtil.checkTypeForNamedArg('class', '__staticmethods', kwargs.__staticmethods, 'table')
for i, key in ipairs(kwargs.__staticmethods) do
libraryUtil.checkType('__staticmethods', i, key, 'string')
if key:sub(1,2) == '__' then
error(("ValueError: staticmethod '%s' has forbidden namespace"):format(key), 2)
elseif rawget(cls.__staticmethods, key) then
warn(("ValueWarning: duplicated staticmethod '%s'"):format(key), 2)
elseif not cls.__staticmethods[key] and cls[key] ~= nil then
error(("ValueError: forbidden attempt to convert '%s' non-staticmethod to staticmethod"):format(key), 2)
end
libraryUtil.checkTypeForNamedArg('class', key, kwargs[key], 'function')
cls.__staticmethods[key] = true
end
kwargs.__staticmethods = nil
end
cls.__methods = {}
for _, base in ipairs(cls.__bases) do
for key in pairs(base.__methods) do
if key:sub(1,1) ~= '_' or base.__protected[key] then
cls.__methods[key] = true
end
end
end
local valid = false
for key, val in pairs(kwargs) do
if type(key) ~= 'string' then
error(("TypeError: invalid attribute name '%s' (string expected, got %s)"):format(tostring(key), type(key)), 2)
elseif key:find('[^_%w]') or key:find('^%d') then
error(("ValueError: invalid attribute name '%s'"):format(key), 2)
elseif key:sub(1,2) == '__' and not una_metamethods[key] and not bin_metamethods[key] and not oth_metamethods[key] then
error(("ValueError: unrecognized metamethod or unauthorized internal attribute {%s: %s}"):format(key, tostring(val)), 2)
end
cls[key] = val
if type(val) == 'function' then
if not cls.__staticmethods[key] and key:sub(1,2) ~= '__' then -- classmethods and _hash were already removed from kwargs
cls.__methods[key] = true
end
if key ~= '__init' then -- __init does not qualify to a functional/proper class
valid = true
end
end
end
if not valid then
error("ValueError: a (sub)class must have at least one functional method", 2)
end
local cls_public = {}
setmetatable(cls_public, cls_public_mt)
classes[cls_public] = cls_private
return cls_public, cls_private
end
local function rissubclass2(class, classinfo)
if class == classinfo then
return true
end
for _, base in ipairs(class.__bases) do
if rissubclass2(base, classinfo) then
return true
end
end
return false
end
local function rissubclass1(class, classinfo, parent, level)
libraryUtil.checkTypeMulti(parent, 2, classinfo, {'class', 'table'}, level)
if classes[classinfo] then
return rissubclass2(class, _classes[classes[classinfo]])
elseif _classes[classinfo] then
return rissubclass2(class, _classes[classinfo])
end
for i = 1, #classinfo do
if rissubclass1(class, classinfo[i], parent, level+1) then
return true
end
end
return false
end
function issubclass(class, classinfo)
libraryUtil.checkType('issubclass', 1, class, 'class')
class = classes[class] or class
return rissubclass1(_classes[class], classinfo, 'issubclass', 4)
end
function isinstance(instance, classinfo)
if not instances[instance] and not _instances[instance] then -- because named (ClassName) instances would fail with checkType
if classinfo == nil then
return false
end
error(("TypeError: bad argument #1 to 'isinstance' (instance expected, got %s)"):format(type(instance)), 2)
end
if classinfo == nil then
return true
end
instance = instances[instance] or instance
return rissubclass1(_classes[instance.__class], classinfo, 'isinstance', 4)
end
local _type = type
type = function (value)
local t = _type(value)
if t == 'table' then
if classes[value] or _classes[value] then
return 'class'
elseif instances[value] or _instances[value] then
value = instances[value] or value
return _classes[value.__class].__name or 'instance' -- should __name be directly readable instead?
end
end
return t
end
libraryUtil.checkType = function (name, argIdx, arg, expectType, nilOk, level)
if arg == nil and nilOk then
return
end
if type(arg) ~= expectType then
error(("TypeError: bad argument #%d to '%s' (%s expected, got %s)"):format(argIdx, name, expectType, type(arg)), level or 3)
end
end
libraryUtil.checkTypeMulti = function (name, argIdx, arg, expectTypes, level)
local argType = type(arg)
for _, expectType in ipairs(expectTypes) do
if argType == expectType then
return
end
end
local n = #expectTypes
local typeList
if n > 1 then
typeList = table.concat(expectTypes, ', ', 1, n-1) .. ' or ' .. expectTypes[n]
else
typeList = expectTypes[1]
end
error(("TypeError: bad argument #%d to '%s' (%s expected, got %s)"):format(argIdx, name, typeList, type(arg)), level or 3)
end
libraryUtil.checkTypeForIndex = function (index, value, expectType, level)
if type(value) ~= expectType then
error(("TypeError: value for index '%s' must be %s, %s given"):format(index, expectType, type(value)), level or 3)
end
end
libraryUtil.checkTypeMultiForIndex = function (index, expectTypes, level)
local indexType = type(index)
for _, expectType in ipairs(expectTypes) do
if indexType == expectType then
return
end
end
local n = #expectTypes
local typeList
if n > 1 then
typeList = table.concat(expectTypes, ', ', 1, n-1) .. ' or ' .. expectTypes[n]
else
typeList = expectTypes[1]
end
error(("TypeError: index '%s' must be %s, %s given"):format(index, typeList, type(index)), level or 3)
end
libraryUtil.checkTypeForNamedArg = function (name, argName, arg, expectType, nilOk, level)
if arg == nil and nilOk then
return
end
if type(arg) ~= expectType then
error(("TypeError: bad named argument %s to '%s' (%s expected, got %s)"):format(argName, name, expectType, type(arg)), level or 3)
end
end
libraryUtil.checkTypeMultiForNamedArg = function (name, argName, arg, expectTypes, level)
local argType = type(arg)
for _, expectType in ipairs(expectTypes) do
if argType == expectType then
return
end
end
local n = #expectTypes
local typeList
if n > 1 then
typeList = table.concat(expectTypes, ', ', 1, n-1) .. ' or ' .. expectTypes[n]
else
typeList = expectTypes[1]
end
error(("TypeError: bad named argument %s to '%s' (%s expected, got %s)"):format(argName, name, typeList, type(arg)), level or 3)
end
local function try_parser(...)
local args = {...}
libraryUtil.checkType('try', 1, args[1], 'function', nil, 4)
local try_clause = args[1]
if args[2] ~= 'except' then
error("SyntaxError: missing required except clause", 3)
end
local except_clauses = {}
local i = 3
local argType, exceptionTypes = nil, {string=1, table=1}
repeat
libraryUtil.checkTypeMulti('try', i, args[i], {'string', 'table', 'function'}, 4)
argType = type(args[i])
if exceptionTypes[argType] then
libraryUtil.checkType('try', i+1, args[i+1], 'function', nil, 4)
except_clauses[#except_clauses+1] = {exceptions={}, handler=args[i+1]}
if argType == 'string' then
except_clauses[#except_clauses].exceptions[args[i]] = true
else
for _, exception in ipairs(args[i]) do
if type(exception) ~= 'string' then
error(("TypeError: invalid exception type in except (string expected, got %s)"):format(type(exception)), 3)
end
except_clauses[#except_clauses].exceptions[exception] = true
end
end
i = i + 3
else
except_clauses[#except_clauses+1] = {exceptions={}, handler=args[i]}
i = i + 2
break
end
until args[i-1] ~= 'except'
local else_clause, finally_clause
if args[i-1] == 'except' then
error("SyntaxError: except after except clause without specific exceptions, which should be the last", 3)
elseif args[i-1] == 'else' then
libraryUtil.checkType('try', i, args[i], 'function', nil, 4)
else_clause = args[i]
i = i + 2
end
if args[i-1] == 'finally' then
libraryUtil.checkType('try', i, args[i], 'function', nil, 4)
finally_clause = args[i]
i = i + 2
end
if args[i-1] ~= nil then
error(("SyntaxError: unexpected arguments #%d–#%d to 'try'"):format(i-1, #args), 3)
end
return try_clause, except_clauses, else_clause, finally_clause
end
function try(...)
local try_clause, except_clauses, else_clause, finally_clause = try_parser(...)
local function errhandler(message)
local errtype = mw.text.split(message, ':')[1]
local handled = false
for _, except in ipairs(except_clauses) do
if except.exceptions[errtype] or #except.exceptions == 0 then
handled, message = pcall(except.handler)
break
end
end
if not handled then
return message
end
end
local success, message = xpcall(try_clause, errhandler)
if else_clause and success then
success, message = pcall(else_clause)
end
if finally_clause then
finally_clause()
end
if not success and message then
error(message, 0) -- what should be the level?
end
end
local classes_proxy, instances_proxy = {}, {}
setmetatable(classes_proxy, {
__index = classes, -- create function to limit access only to modules which define the requested classes and testcases pages
__newindex = function () error("KeyError: forbidden write attempt to classes proxy", 2) end,
__metatable = "unauthorized access attempt of classes proxy metatable"
})
setmetatable(instances_proxy, {
__index = instances, -- create function to limit access only to testcases pages
__newindex = function () error("KeyError: forbidden write attempt to instances proxy", 2) end,
__metatable = "unauthorized access attempt of instances proxy metatable"
})
return {classes_proxy, instances_proxy}
kp4odcg1ouksdpez4cz28t4gpkf1psx
Module:Infobox/doc
828
25149
129409
2026-07-29T10:05:46Z
Khomphoi28
15846
ສ້າງໜ້າດ້ວຍ "{{module rating|<!-- ໃສ່ລະດັບຄວາມສົມບູນຂອງມໍດູນ ເຊັ່ນ: "pre-alpha", "alpha", "beta", "release" ຫຼື "protected" -->}} <!-- ໃສ່ໝວດດ້ານລຸ່ມສຸດ ສ່ວນລິ້ງຂ້າມພາສາໃຫ້ໃຊ້ວິກິດາຕ້າ --> == ການໃຊ້ງານ == <code><nowiki>{{</nowiki>#invoke:Infobox|''function_name''<nowiki>}}</nowiki></code>..."
129409
wikitext
text/x-wiki
{{module rating|<!-- ໃສ່ລະດັບຄວາມສົມບູນຂອງມໍດູນ ເຊັ່ນ: "pre-alpha", "alpha", "beta", "release" ຫຼື "protected" -->}}
<!-- ໃສ່ໝວດດ້ານລຸ່ມສຸດ ສ່ວນລິ້ງຂ້າມພາສາໃຫ້ໃຊ້ວິກິດາຕ້າ -->
== ການໃຊ້ງານ ==
<code><nowiki>{{</nowiki>#invoke:Infobox|''function_name''<nowiki>}}</nowiki></code>
<includeonly>{{Sandbox other||
<!--ໃສ່ໝວດບ່ອນນີ້ ສ່ວນລິ້ງຂ້າມພາສາໃຫ້ໃຊ້ວິກິດາຕ້າ -->
}}</includeonly>
mamickzkb8kd8wdu0smqu6tbnqy20jf