ວິກິພີເດຍ 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) .. '&lt;' .. tag .. '&gt;...&lt;/' .. tag .. '&gt;') 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 &#124; 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("ປະມານ&#x20;%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("&#x20;%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("ປະມານ&#x20;%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("&#x20;%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}}}|§&nbsp;{{{section}}}]] ສຳລັບລາຍລະອຽດເພີ່ມເຕີມ | ຄ່າຄຸນລັກ..." 129399 wikitext text/x-wiki {{Sister project | position = {{{position|}}} | project = data | text = {{module other|ມໍດູນ|ແມ່ແບບ}}ນີ້ໃຊ້{{#if:{{{section|}}} |ໜຶ່ງ ຫຼື ຫຼາຍຄ່າຄຸນລັກສະນະຈາກ[[ວິກິດາຕ້າ]] ເບິ່ງຕື່ມທີ່ [[#{{{section}}}|§&nbsp;{{{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>&nbsp;&nbsp;<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;\">&#124;_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;">&#123;&#123;', template, ('<wbr><nowiki>|%s</nowiki>'):rep(#args):format(unpack(args)), '&#125;&#125;</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