Jump to content

Tiện ích mở rộng:Loops

From mediawiki.org
This page is a translated version of the page Extension:Loops and the translation is 100% complete.
Hướng dẫn tiện ích mở rộng MediaWiki
Loops
Trạng thái phát hành: ổn định
Triển khai Hàm phân tích cú pháp
Mô tả Cung cấp các hàm phân tích cú pháp dành cho việc thực hiện các vòng lặp
Tác giả
Người bảo trì MGChecker
Phiên bản mới nhất 0.5.2 (2019-08-05)
MediaWiki 1.34+
PHP 5.6+
Database changes Không
  • $wgLoopsEnabledFunctions
  • $wgLoopsCountLimit
Licence GNU General Public License 2.0 or later
Tải xuống
README
RELEASE-NOTES
Ví dụ sandbox.semantic-mediawiki.org
Translate the Loops extension if it is available at translatewiki.net
Phản hồi Open tasks · Báo cáo lỗi

Tiện ích mở rộng Loops cung cấp Parser functions dành cho việc thực hiện các vòng lặp.

Hiện tại, tiện ích mở rộng này đang được bảo trì ở một cấp độ cơ bản bởi MGChecker.

Ứng dụng

Các ví dụ sau đây sử dụng tiện ích mở rộng Variables và, trong một số trường hợp, cả tiện ích mở rộng ParserFunctions .

#while

{{#while}} thực hiện một vòng lặp (tức là nó liên tục phân tích cú pháp một câu lệnh khối đánh dấu wiki nhất định) miễn là đánh dấu điều kiện không phải là khoảng trắng.

{{#while:
 | <văn bản điều kiện>
 | <câu lệnh khối>
}}
Ví dụ

Đánh dấu wiki:

{{#vardefine: i | 0 }}{{#while:
 | {{#ifexpr: {{#var: i }} < 5 | true }}
 | <nowiki />
* {{#var: i }}{{#vardefine: i | {{#expr: {{#var: i }} + 1 }} }}
}}

sẽ cho ra như sau:

  • 0
  • 1
  • 2
  • 3
  • 4

{{#while}} còn có thể được sử dụng trong một bản mẫu để mô phỏng một mảng được đánh số. Nếu trang "Template:Loops Test" chứa

{{#vardefine: i | 0 }}{{#while:
 | {{{arg{{#var: i }} |}}}
 | <nowiki />
* {{{arg{{#var: i }} }}}{{#vardefine: i
   | {{#expr: {{#var: i }} + 1 }}
 }}
}}

thì đánh dấu wiki

{{Loops Test
 |arg0=không
 |arg1=một
 |arg2=hai
 |arg3=ba
 |arg4=bốn
}}

sẽ cho ra:

  • không
  • một
  • hai
  • ba
  • bốn

Điều quan trọng cần lưu ý là khoảng trắng, bao gồm dòng mới, tab và dấu cách, sẽ bị loại bỏ khỏi đầu và cuối tất cả các đối số của các hàm phân tích cú pháp này. Nếu điều này không được mong muốn, việc thêm bất kỳ ký tự nào không phải khoảng trắng (bao gồm cả mã hóa HTML cho ký tự khoảng trắng &#32;) sẽ ngăn chặn việc loại bỏ thêm (do đó có câc thẻ ‎<nowiki> trong các ví dụ trên).

#dowhile

{{#dowhile}} hoạt động chính xác như {{#while}}, ngoại trừ việc câu lệnh khối được đảm bảo sẽ được phân tích cú pháp và hiển thị (nếu nó cho kết quả là văn bản có thể hiển thị) ít nhất một lần. Điều này được thực hiện trước khi văn bản điều kiện được ước lượng.

#loop

{{#loop: <variable name>
 | <starting value>
 | <number of loops to be performed>
 | <wiki markup>
}}

{{#loop}} liên tục phân tích cú pháp và hiện thị {{#loop}} số lần bằng với giá trị tuyệt đối của <number of loops to be performed>. <Starting value> được đặt trong một biến (có thể truy cập bằng hàm phân tích cú pháp {{#var:}} của tiện ích mở rộng Variables ) bằng cách sử dụng tên <variable name>. Sau mỗi vòng lặp, biến sẽ được tăng thêm một nếu <number of loops to be performed> là số dương, hoặc giảm đi một nếu <number of loops to be performed> là số âm.

Trong tất cả các hàm vòng lặp, #loop nên có hiệu suất tốt nhất vì không có điều kiện nào phải được mở rộng và xác nhận cho mỗi chu kỳ.
Ví dụ

Mã sau đây:

{{#loop: varname
 | 4
 | 4
 | <nowiki />
* Đây là vòng {{#var: varname }} và ta còn {{#expr: 7 - {{#var: varname }} }} nữa
}}

sẽ cho ra:

  • Đây là vòng 4 và ta còn 3 nữa
  • Đây là vòng 5 và ta còn 2 nữa
  • Đây là vòng 6 và ta còn 1 nữa
  • Đây là vòng 7 và ta còn 0 nữa

#forargs (thử nghiệm)

{{#forargs}} sẽ được sử dụng trong các bản mẫu.

Nó lấy các đối số được cho vào bản mẫu và gán chúng vào các biến có thể được truy cập bằng hàm phân tích cú pháp {{#var:}} của tiện ích mở rộng Variables .

{{#forargs: <prefix>
 | <key>
 | <value>
 | <block statement>
}}

Hàm này sẽ lặp qua từng đối số có tên bắt đầu bằng <prefix>.

Với mỗi lần lặp, nó sẽ gán tên đối số trừ đi <prefix> vào <key> như thể đang gọi {{#vardefine: <key> }}.

Sau đó nó lấy giá trị của đối số và gán nó vào <value> theo một phương pháp tương tự.

Sau đó câu lệnh khối được mở rộng.

Câu lệnh khối có thể chứa {{#var: <key> }} và {{#var: <value> }} để truy cập các đối số được lưu trữ.

Ví dụ

Nếu trang "Template:Loops Test" chứa

{{#forargs: arg
 | key
 | value
 | <nowiki />
* {{#var: key }} = {{#var: value }}
}}

thì đánh dấu wiki

{{Loops Test
 | arg1=val1
 | spam=spammity
 | arg5=val5
 | argument=value
}}

sẽ cho ra

  • 1 = val1
  • 5 = val5
  • ument = value

#fornumargs (thử nghiệm)

{{#fornumargs: <key>
 | <value>
 | <block statement>
}}

{{#fornumargs}} hoạt động tương tự như {{#forargs}} với hai khác biệt chính: Nó không cần một đối số tiền tố, và nó chỉ hoạt động trên các đối số được đánh số dù chúng được đánh số rõ ràng,

{{Template
 | 1=one
 | 2=two
}}

hoặc được đánh số ngầm định.

{{Template
 | one
 | two
}}

Việc kết hợp các phương pháp này trong cùng một lời gọi bản mẫu có thể dẫn đến việc ghi đè các giá trị, vì vậy hãy cẩn thận.

Ví dụ

Nếu "Template:Loops Test" được sửa đổi để chứa:

{{#fornumargs: number
 | value
 | <nowiki />
* {{#var: number }} = {{#var: value }}
}}

thì

{{Loops Test
  | Apricot
  | B = Bolognese
  | Caramel slice
  | 5 = Eclair
}}

sẽ cho kết quả là

  • 1 = Apricot
  • 2 = Caramel slice
  • 5 = Eclair

Cách cài đặt

Một số các hàm phân tích cú pháp được cung cấp bởi tiện ích mở rộng này yêu cầu ParserFunctions cũng như tiện ích mở rộng Variables phải được cài đặt trước.
  • Download and move the extracted Loops folder to your extensions/ directory.
    Developers and code contributors should install the extension from Git instead, using:
    cd extensions/
    git clone https://gerrit.wikimedia.org/r/mediawiki/extensions/Loops
    
  • Thêm mã sau vào dưới cùng tệp $LocalSettings của bạn:
    wfLoadExtension( 'Loops' );
    
  • Cấu hình theo ý muốn của bạn
  • Yes Xong – Chuyển tới Special:Version trên wiki của bạn để xác nhận phần mở rộng được cài đặt thành công.

Cách cấu hình

Cảnh báo Cảnh báo: Don't edit LocalSettings.php with document editors like Notepad on Windows 10 Version 1809 or earlier, TextEdit, or other text editors that add byte order marks to files. These break the PHP runtime of your wiki. Instead, use a code editor, e.g. Vim or Notepad++. These handle file encodings properly. They can also be used to repair files previously broken by document editors.

Những biến cấu hình này cần được thiết lập trong tệp LocalSettings.php sau khi chèn tiện ích mở rộng này.

$wgLoopsCountLimit
Tham số này thiết lập số lượng vòng lặp tối đa mà một trang được cho phép thực hiện (mặc định là 100). Thiết lập nó thành -1 sẽ cho các vòng lặp chạy trong phạm vi môi trường phps. Tham số này sẽ không ảnh hưởng đến cả hàm phân tích cú pháp {{#forargs:}} lẫn {{#fornumargs:}}.
$wgLoopsEnabledFunctions
Biến cấu hình (mảng) để xác định hàm Loops nên được kích hoạt. Mặc định là các hàm đã được kích hoạt nếu tiện ích mở rộng Variables cũng đã được cài đặt. Nếu tiện ích mở rộng Variables chưa được cài đặt, #loop, #forargs và #fornumargs sẽ bị vô hiệu hóa vì chúng không không hoạt động mà không có nó được cài đặt. Để kích hoạt chỉ các hàm #fornumargs và #forargs, có thể sử dụng:
$wgLoopsEnabledFunctions = array_diff(
    $wgLoopsEnabledFunctions, [
        'forargs', 'fornumargs'
        ]
    );


Xem thêm