Ví dụ Smarty PHP

Smarty là một công cụ mẫu cho PHP, tạo điều kiện thuận lợi cho việc tách bản trình bày (HTML/CSS) khỏi logic ứng dụng

Tài liệu

Đọc tài liệu để biết cách sử dụng

Yêu cầu

Smarty có thể chạy với PHP 7. 1 to PHP 8. 2

Cài đặt

Smarty phiên bản 3. 1. 11 trở lên có thể được cài đặt với Composer

Để có phiên bản ổn định mới nhất của Smarty, hãy sử dụng

composer require smarty/smarty

Thêm trong phần Bắt đầu của tài liệu

Smarty là một công cụ/khung công tác tạo khuôn mẫu dựa trên PHP. Nó cho phép bạn tách biệt logic kinh doanh của mình khỏi sự trực quan hóa của nó, bằng cách loại bỏ càng nhiều mã PHP càng tốt khỏi chế độ xem của bạn. Một số nhà phát triển và khung không muốn sử dụng công cụ tạo khuôn mẫu, những người khác lại thích họ sử dụng PHP đơn giản trong chế độ xem của bạn. Cả hai quan điểm đều có thể được tranh luận, và cuối cùng, chủ yếu là vấn đề sở thích. Dù sao, không bao giờ là một ý kiến ​​tồi khi dùng thử trước khi quyết định không sử dụng, và đó là nội dung của hướng dẫn này. dùng thử Khung tạo mẫu Smarty


Bước 0. Điều gì sẽ xảy ra

Ở phần cuối của hướng dẫn này, bạn sẽ có ý tưởng cơ bản về cách thức hoạt động của Smarty. Bạn sẽ có thể tải các tệp mẫu, chuyển các biến cho chúng, sử dụng "bố cục" trong đó các chế độ xem khác của bạn được chèn vào và viết các công cụ sửa đổi của riêng bạn. Tất cả điều này sẽ được thực hiện bằng cách sử dụng một lớp trình bao bọc bổ sung mà bạn có thể dễ dàng tích hợp vào các dự án hiện có của mình


Bước 1. Thiết lập dự án

Dự án cho hướng dẫn này sẽ có một thiết lập rất dễ dàng, vì chúng tôi không phát triển một ứng dụng thực sự. Chỉ cần tạo một thư mục dự án (của tôi có tên là "smarty_example") với một chỉ mục. php trong đó và một thư mục có tên "lib" bên trong nó. Ngoài ra, tạo một tệp có tên smtemplate. php trong thư mục "lib". Tiếp theo, tạo thư mục "lượt xem" bên trong "smarty_example". Thư mục này sẽ chứa các tệp mẫu thông minh của chúng tôi

Trước khi bạn có thể sử dụng một cái gì đó, bạn phải cài đặt nó. Rất may, cài đặt Smarty cực kỳ dễ dàng và hầu như không yêu cầu cấu hình. Trước hết, tải xuống Smarty và giải nén kho lưu trữ. Bạn có thể kiểm tra mọi thứ bên trong kho lưu trữ, nhưng chúng tôi sẽ chỉ cần thư mục "libs" cho ứng dụng của mình. Đổi tên nó thành "smarty" và dán nó vào thư mục "lib" của ứng dụng của chúng tôi. Smarty sử dụng một số thư mục bổ sung, vì vậy hãy tạo các thư mục "templates_c", "cache" và "configs" bên trong thư mục "lib/smarty" của chúng tôi. Nếu bạn không sử dụng Windows, bạn sẽ phải cấp 775 quyền trên các thư mục này cho máy chủ web của mình. Cây thư mục của bạn bây giờ trông như thế này

Ví dụ Smarty PHP


Bước 2. Tạo Lớp SMTemplate

Mỗi lập trình viên đều có ý tưởng riêng về API lý tưởng. Để điều chỉnh API của Smarty một chút và cho phép chúng tôi thêm một số chức năng bổ sung, chúng tôi sẽ tạo một lớp trình bao bọc có tên là SMTemplate, lớp này sẽ xử lý các chi tiết thông minh cho chúng tôi. Cách tiếp cận này có một lợi thế khác. nếu, tại một thời điểm, bạn nên chọn sử dụng một công cụ mẫu khác, bạn có thể tạo một trình bao bọc cho công cụ đó, trong khi vẫn giữ lại giao diện SMTemplate và do đó không vi phạm mã sử dụng lớp SMTemplate của chúng tôi

Lưu trữ cấu hình của bạn

Trước khi mã hóa chức năng của lớp SMTemplate, chúng tôi sẽ cần một nơi để lưu trữ một số chi tiết cấu hình. Bạn có thể làm điều này theo nhiều cách, tôi. e. bằng cách xác định các tùy chọn cấu hình dưới dạng hằng số lớp, bằng cách xác định chúng dưới dạng hằng số trong smtemplate. php hoặc bằng cách giữ chúng trong một tệp cấu hình riêng. Tôi thích tùy chọn cuối cùng hơn, vì vậy tôi sẽ tạo một smtemplate_config. tập tin php. Smarty cần cấu hình cho các thư mục mẫu, mẫu đã biên dịch, bộ đệm và cấu hình. Sau này, chúng tôi cũng có thể thêm các tùy chọn cụ thể của SMTemplate vào tệp cấu hình của mình, nhưng hiện tại, điều này sẽ làm

1
2
/**

3
 * @file

4
 * Configuration file for the SMTemplate class

5
___________9____10__________
2
0
2
1
2
2
2
3
2
4
2
5
2
6
2
7
2
8
2
9
/**

0
/**

1_______3_______2_______3_______3_______3_______4

Xây dựng lớp SMTemplate

Lớp SMTemplate sẽ tải tệp cấu hình này và chuyển các tùy chọn cho Smarty. Trước khi chúng ta có thể chuyển các tùy chọn, chúng ta cần một đối tượng của lớp Smarty. Lớp SMTemplate của chúng tôi có thể mở rộng lớp Smarty, nhưng tôi thích sử dụng một biến thể hiện riêng để chứa đối tượng Smarty. Cho đến nay, chúng tôi có những điều sau đây cho lớp SMTemplate của chúng tôi

1
2
/**

3
 * @file

4
3
1
5
 */
6
2
1
3
6
2
3
3
8
2
5
2
7
 * @file

1
2
9
 * @file

3
/**

1
 * @file

5
/**

3
 * @file

3
 * @file

8
 * @file

9
4
0
4
1
4
2
4
3
4
4
4
5
4
6
4
7
4
8
4
9
 * Configuration file for the SMTemplate class

0
 * Configuration file for the SMTemplate class

1
 * Configuration file for the SMTemplate class

2
 * Configuration file for the SMTemplate class

3
 * Configuration file for the SMTemplate class

4
 * Configuration file for the SMTemplate class

5
 * Configuration file for the SMTemplate class

6
 * Configuration file for the SMTemplate class

7

Kết xuất mẫu

Như bạn có thể thấy, class của chúng ta vẫn còn khá thảm hại, vì nó không thể render bất cứ thứ gì. Chúng tôi sẽ giải quyết vấn đề này bằng cách thêm chức năng kết xuất, tải mẫu và hiển thị mẫu đó

1
2
5
0_______4_______
5
2_______6_______
 * Configuration file for the SMTemplate class

5

Để kết xuất bất cứ thứ gì, chúng ta cần tạo một tệp mẫu, sau đó gọi hàm kết xuất từ ​​chỉ mục của chúng ta. tập tin php. Tệp mẫu sẽ khá cơ bản, chứa một trang html đơn giản. Đặt tên là "nhà. tpl" và đặt nó trong thư mục "lượt xem" của chúng tôi

1
2
5
7
3
5
9_______6__________
 */
1
5
9_______3
6
9_______5
2
1
 */
7
2
3
 */
9
2
5
6
1
2
7
6
3_______2_______9_______10_______5

Bây giờ, tất cả những gì còn lại là tạo một đối tượng SMTemplate và hiển thị 'nhà'. Mở chỉ mục. php, thêm các dòng mã sau và điều hướng đến đó trong trình duyệt của bạn

1
2
6
8
3
4
2
01_______8_______
2
03

Ví dụ Smarty PHP


Bước 3. Gán và định dạng biến

Nếu chúng tôi không thể hiển thị bất cứ thứ gì một cách linh hoạt, Smarty sẽ khá vô dụng. May mắn thay, chúng ta có thể gán các biến cho lớp thông minh của mình và hiển thị các biến đó trong mẫu của chúng ta. Chúng ta cũng có thể sử dụng một số chức năng Smarty (tốt, thực sự là công cụ sửa đổi) để định dạng chúng đúng cách

Truyền một mảng các biến

Mặc dù Smarty hỗ trợ gán biến, SMTemplate của chúng tôi chưa (chưa). Chúng tôi sẽ cung cấp kiểu gán CodeIgniter, trong đó bạn chuyển một mảng cho hàm kết xuất. Bạn cũng có thể điều chỉnh SMTemplate để hỗ trợ các phương pháp khác; . Tuy nhiên, đối với hướng dẫn này, việc truyền một mảng sẽ làm được. Trước khi gán các biến, chúng tôi sẽ chỉnh sửa mẫu của mình thành thứ gì đó năng động hơn một chút. Nói lời chào với thế giới là thông lệ đối với các lập trình viên, nhưng không hữu ích lắm, vì vậy hãy sử dụng một biến để xác định xem chúng ta sẽ chào ai. Thứ hai, chúng tôi sẽ thêm ngày hôm nay vào tin nhắn. Các biến có thể được hiển thị bằng cách đặt chúng trong dấu ngoặc nhọn

1
2
2
06_______4_______
2
08
4
2_______10

Nếu bạn làm mới trang, bạn sẽ thấy rằng các biến chưa được điền vào, vì chúng tôi không đặt chúng. Việc đặt biến có thể được thực hiện bằng cách sử dụng smarty->gán, vì vậy hãy gán chúng. Hàm kết xuất bây giờ sẽ lấy một mảng dữ liệu tùy chọn làm đối số thứ hai

1
2
2
13_______4__________
2
15
4
2_______17
5
7_______5
6
2_______21
2
1
 * Configuration file for the SMTemplate class

7

Nó vẫn không hoạt động, bởi vì chúng tôi không chuyển vào một mảng khi gọi hàm kết xuất của chúng tôi. Chúng ta có thể dễ dàng làm điều này, bằng cách thay đổi một vài dòng trong chỉ mục của chúng ta. tập tin php

1
2
2
26
3
___
2
28
4
2
30
5
2_______32
6
2_______1
2
01
2
3
2
37

Nếu bạn làm mới ngay bây giờ, trang sẽ có nội dung như "Xin chào, JR. Hôm nay là 1282810169. ". Tất nhiên, ngày này không thực sự như những gì chúng tôi đã nghĩ. Nó cần được định dạng, điều này đưa chúng ta đến phần tiếp theo

Sử dụng công cụ sửa đổi để định dạng biến

Smarty không chỉ là một công cụ mẫu tìm kiếm và thay thế các biến. Đây cũng là một khung mạnh mẽ, cho phép bạn tiết kiệm thời gian bằng cách sử dụng những thứ như công cụ sửa đổi, chức năng và khối. Ví dụ: nếu chúng tôi muốn định dạng ngày của mình, chúng tôi có thể sử dụng công cụ sửa đổi date_format. Để áp dụng một công cụ sửa đổi cho một biến, chỉ cần đặt một ký tự ống và tên công cụ sửa đổi đằng sau nó, theo sau là các đối số tùy chọn được phân tách bằng dấu hai chấm. Công cụ sửa đổi date_format nhận một đối số chuỗi, đại diện cho định dạng ngày sẽ sử dụng và một ngày mặc định tùy chọn mà chúng tôi sẽ không cần. Đoạn mã sau sẽ hiển thị ngày là "ngày (theo số thập phân) Tháng"

1
2
2
06
3
2
42
4
2_______10

Điều này bây giờ sẽ cung cấp một cái gì đó có dạng "Xin chào, JR. Hôm nay là ngày 26 tháng 8. " Bây giờ, có lẽ chúng tôi muốn chắc chắn rằng người nhận của bạn là chữ hoa. Chúng ta có thể đạt được điều đó bằng cách sử dụng công cụ sửa đổi trên

1
2
2
06
3
2
49
4
2_______10

Bây giờ, nếu tôi thay đổi chỉ mục. php để chuyển 'jr' thay vì 'JR', mẫu sẽ vẫn hiển thị 'JR'. Dễ dàng, phải không?


Bước 4. Thao tác với bố cục

Trước khi chúng tôi thay đổi lớp SMTemplate của mình để kích hoạt bố cục, trước tiên chúng tôi sẽ tạo bố cục. Tạo một thư mục mới có tên "layouts" bên trong thư mục "smarty_example" của chúng tôi và di chuyển về nhà. tpl ở đó. Đổi tên nó thành 'trang. tpl'. Chúng tôi sẽ xóa nội dung 'xin chào thế giới' trước đây của mình và đặt hai đường kẻ ngang vào. Nội dung của chúng tôi sẽ được đặt ở giữa những dòng này

1
2
5
7
3
5
9_______6__________
 */
1
5
9_______3
6
9_______5
2
1
 */
7
2
3
 */
9
2
5
2
68
2
7
2
68_______2_______9_______10_______3__
/**

1_______10_______5

Tất nhiên, điều này sẽ không hiệu quả, vì Smarty sẽ không biết chèn nội dung của chúng tôi vào đâu. Có nhiều cách để lấy nội dung từ một mẫu khác bên trong bố cục của chúng tôi và tôi sẽ sử dụng chức năng tìm nạp của Smarty. Hàm này trả về mẫu của chúng ta dưới dạng văn bản, thay vì hiển thị nó. Điều này có nghĩa là chúng tôi có thể tìm nạp mẫu rồi gán nó cho một biến để sử dụng trong mẫu của chúng tôi. Tên của biến này là của bạn để lựa chọn. Tôi đặt tiền tố cho các biến đặc biệt của mình bằng __, để phân biệt chúng với các biến khác mà tôi sử dụng. Tôi sẽ gọi đây là 'nội dung', vì chúng tôi đang chỉ định nội dung trang của mình cho nó

1
2
2
06
3
2
79
4
2
81
5
2_______79
6
2
10

Điều này kết thúc bố cục của chúng tôi, vì vậy hãy tạo một số mẫu để sử dụng làm nội dung. Tôi sẽ tạo một mẫu 'xin chào', mẫu này sẽ chứa dòng tiêu chuẩn 'xin chào thế giới' và mẫu 'lipsum', chứa một số văn bản Lorem Ipsum. Đừng quên cung cấp cho các mẫu này một. phần mở rộng tpl

1
2
2
88

1
2
2
91

Điều chỉnh lớp SMTemplate của chúng tôi để sử dụng bố cục cũng cực kỳ dễ dàng. Trước tiên, chúng tôi sẽ thiết lập tùy chọn cấu hình cho thư mục bố cục, giống như chúng tôi đã làm cho chế độ xem của mình

1
2
/**

3
 * @file

4
 * Configuration file for the SMTemplate class

5
___
 */
6
___
2
0
2
1
2
2
2
3
2
4
2
5
/**

08
2
7
2
6
2
9
2
8__
/**

1_______3_______0_______3_______3_______3_______2_______3_______5_______8

Tiếp theo, chúng tôi sẽ thay đổi chức năng kết xuất của chúng tôi. Chúng tôi sẽ cung cấp bố cục dưới dạng tham số thứ ba tùy chọn và đặt mặc định là 'trang'. Sau đó, chúng tôi sẽ tìm nạp mẫu được yêu cầu, gán nó cho biến $__content và hiển thị bố cục của chúng tôi

1
2
/**

21
3
___
2
15
4
2_______17_______8_______7_______5
6
3_______29
2
1
/**

31
2
3
/**

33
2
5
 * Configuration file for the SMTemplate class

7

Có một số điều cần xem xét, liên quan đến mã này. Trước hết, chúng tôi chưa cho Smarty biết nơi tìm bố cục của chúng tôi. Chúng tôi có thể làm điều đó bằng cách thêm một thư mục mẫu, nhưng cách tiếp cận này có nghĩa là chúng tôi không thể đặt tên bố cục giống với tên mẫu của mình - Smarty sẽ không biết nên chọn cái nào. Chúng tôi có thể giải quyết vấn đề này bằng cách cung cấp cho bố cục của mình một tiện ích mở rộng khác hoặc bằng cách đặt và đặt lại thư mục mẫu bên trong chức năng kết xuất của chúng tôi hoặc bằng cách sử dụng các chức năng Smarty nâng cao hơn. Hiện tại, chúng tôi sẽ giải quyết với ràng buộc rằng bố cục và chế độ xem không được có cùng tên. Chúng ta có thể thêm thư mục bố cục của mình bằng hàm addTemplateDir()

1
2
/**

38
3
___
/**

40
4
 * @file

3_______8_______3_______44
6
3_______46
2
1
/**

48
2
3
/**

50
2
5
/**

52
2
7
/**

54_______2_______9_______7_______7

Hãy kiểm tra nó bằng cách thay đổi chỉ số của chúng tôi. tập tin php một lần nữa

1
2
6
8
3
4
2
01_______8_______3_______64

nó hoạt động

Ví dụ Smarty PHP

Và nếu chúng tôi thay đổi nó thành kết xuất 'lipsum', nó cũng hoạt động tốt

Ví dụ Smarty PHP


Bước 5. Tạo công cụ sửa đổi của riêng bạn

Là phần cuối cùng của hướng dẫn này, tôi sẽ giới thiệu một trong những tính năng nâng cao hơn của Smarty, giúp nó không chỉ là một công cụ tạo khuôn mẫu đơn giản. Smarty chứa một số chức năng và công cụ sửa đổi tiêu chuẩn, nhưng cũng cực kỳ dễ dàng để tạo của riêng bạn. Hãy xem công cụ sửa đổi mà chúng tôi đã sử dụng để định dạng ngày của mình

1
2
/**

67

Nếu bạn muốn một công cụ sửa đổi tùy chỉnh, tất cả những gì bạn cần làm là viết một hàm PHP

Điều này thực sự sẽ dẫn đến một lệnh gọi hàm smarty_modifier_date_format(), với $date và chuỗi định dạng của chúng ta làm đối số. Hàm này sẽ trả về một chuỗi và chuỗi này sẽ được hiển thị. Vì vậy, nếu bạn muốn có một công cụ sửa đổi tùy chỉnh, tất cả những gì bạn cần làm là viết một hàm PHP. Ví dụ, chúng ta sẽ viết một công cụ sửa đổi có tên là 'weirdcase', nó sẽ viết hoa tất cả các phụ âm và viết thường tất cả các nguyên âm, i. e. 'Lorem Ipsum' trở thành 'LoReM IPSuM'. Để thực hiện việc này, hãy tạo một tệp có tên 'công cụ sửa đổi. trường hợp kỳ quặc. php' trong thư mục 'lib/smarty/plugins'. Công cụ sửa đổi của chúng tôi sẽ chỉ nhận một đối số, chuỗi cần được thay đổi

1
2
/**

3
/**

72
4
/**

74
5
3_______76
6
3_______78
2
1
/**

80
2
3
/**

82
2
5
/**

84
2
7
 */
2
9_______2_______0_______3_______1_______3_______90_______5_______ 7

Chúng ta có thể nhận được kết quả của mình bằng cách xác định một mảng 'nguyên âm', biến chuỗi của chúng ta thành một mảng rồi duyệt qua nó và kiểm tra xem mỗi ký tự có nằm trong mảng nguyên âm của chúng ta không. Nếu đúng thì viết thường, ngược lại viết hoa. Các ký tự đã sửa đổi sau đó được thêm vào một biến kết quả

1
2
3_______90
3
___
/**

98
4
3
00
5
4_______02
6
5_______3
2
1
3
06
2
3
3
08
2
5
3
10
2
7
 * Configuration file for the SMTemplate class

5_______2_______9_______5_______3_______3_______1_______3_
1
3_________1

Điều này sẽ thực hiện thủ thuật, vì vậy hãy kiểm tra nó. Chỉnh sửa 'lipsum. tpl' và thêm một h1 chứa 'Lorem Ipsum' kỳ lạ của chúng tôi vào đó

1
2
3
21_______4_______
2
91

Ví dụ Smarty PHP


Bước 6. Kết luận

Mặc dù có rất nhiều điều về Smarty mà tôi có thể đưa vào trong hướng dẫn này, nhưng hy vọng rằng điều này sẽ cung cấp cho bạn kiến ​​thức cơ bản về cách làm việc với nó. Về cơ bản bạn đã biết mọi thứ bạn cần biết. Bây giờ bạn cũng có thể xác định xem bạn có thích ý tưởng sử dụng khung tạo khuôn mẫu này hay không. Các chủ đề nâng cao hơn, chẳng hạn như bộ lọc và khối, rất hữu ích, tuy nhiên, bạn vẫn sẽ làm tốt nếu không có chúng. Bạn có thể tìm tài liệu về các tính năng nâng cao hơn tại trang web Smarty. Cảm ơn vì đã đọc

Làm cách nào để sử dụng PHP trong Smarty?

Cài đặt Smarty .
Chuẩn bị một thư mục để thực hành, ví dụ wamp/www/smarty
Tải xuống tệp Mẫu Smarty. Bạn có thể tải xuống từ trang web của họ tại smarty. php. net. .
Giải nén tệp nén Smarty. .
Sau đó, chỉ cần đổi tên thư mục đó thành "smarty"
Tạo hai thư mục có tên. mẫu và template_c

Ý nghĩa của Smarty trong PHP là gì?

Smarty là công cụ tạo khuôn mẫu cho PHP . Nó cho phép bạn tách logic và trình bày bằng cách tách mã PHP khỏi trình bày HTML (hoặc bất kỳ thứ gì khác cho vấn đề đó).

Smarty có phải là một khung công tác PHP không?

Smarty là một hệ thống mẫu web được viết bằng PHP . Smarty chủ yếu được quảng bá như một công cụ để phân tách các mối quan tâm.

Làm cách nào tôi có thể nhận URL hiện tại trong Smarty?

"://". $_SERVER['SERVER_NAME']. $port. $_SERVER['REQUEST_URI']; .