English | العربية | বাংলা | Bosanski | Deutsch | Español | Français | हिन्दी | Italiano | 日本語 | 한국어 | मराठी | Português | Русский | Kiswahili | தமிழ் | తెలుగు | Türkçe | اردو | Tiếng Việt | 中文
- Nâng cấp
- Giới thiệu
- Cài đặt
- Sử dụng (Không có Laravel)
- Sử dụng (Có Laravel)
- Cấu hình
- Hướng Dẫn Hỗ Trợ
- Giấy phép - Giấy phép MIT
Nâng cấp
Nếu bạn đang nâng cấp từ một phiên bản trước, vui lòng xem Hướng dẫn Nâng cấp để biết những thay đổi quan trọng và các bước di chuyển.
Giới thiệu
MJML là một ngôn ngữ đánh dấu được thiết kế đặc biệt để đơn giản hóa quy trình mã hóa email responsive. Cú pháp ngữ nghĩa của nó đảm bảo dễ dàng và đơn giản, trong khi thư viện phong phú các thành phần tiêu chuẩn giúp tăng tốc phát triển và giảm độ phức tạp của mã email của bạn. Cơ chế mã nguồn mở của MJML tạo ra HTML chất lượng cao, responsive tuân thủ các quy tắc tốt nhất. Nếu bạn đã trải qua những thất vọng khi làm việc với Outlook, gói này được thiết kế cho bạn.
Triển khai MJML của chúng tôi phục vụ như một lớp bọc cho API chính thức của MJML. Nó cho phép biên dịch MJML thành HTML một cách thuận tiện ngay trong PHP, mà không cần NodeJS. Gói này lý tưởng cho các ứng dụng PHP muốn tích hợp MJML mà không cần phải cài đặt NodeJS và MJML CLI.
Ví dụ
// Không có Laravel(new MJML)->render( '<mjml><mj-body><mj-section><mj-column><mj-text>Hello World</mj-text></mj-column></mj-section></mj-body></mjml>'); // HTML đã được rút gọn(new MJML)->minify()->render( '<mjml><mj-body><mj-section><mj-column><mj-text>Hello World</mj-text></mj-column></mj-section></mj-body></mjml>'); // Với LaravelMJML::render( '<mjml><mj-body><mj-section><mj-column><mj-text>Hello World</mj-text></mj-column></mj-section></mj-body></mjml>'); // Với Laravel và HTML đã được rút gọnMJML::minify()->render( '<mjml><mj-body><mj-section><mj-column><mj-text>Hello World</mj-text></mj-column></mj-section></mj-body></mjml>');
Cài đặt
-
Đầu tiên, thêm đoạn sau vào tệp
composer.jsoncủa bạn để chỉ định cho gói của chúng tôi tải về các tệp nhị phân đúng cho hệ điều hành của bạn khi gói của chúng tôi được cài đặt. Các tệp nhị phân sẽ được tải về sau khi bạn chạyinstall,update, hoặcdump-autoload.{"post-autoload-dump": ["DefectiveCode\\MJML\\PullBinary::all"]}Tệp nhị phân MJML sẽ được lấy từ CDN của chúng tôi và lưu trong thư mục "bin" của gói này trong quá trình cài đặt hoặc cập nhật composer. Đảm bảo rằng bạn đã tải về các tệp nhị phân cần thiết cho cả môi trường cục bộ và sản xuất.
Theo mặc định,
allsẽ tải về tất cả các tệp nhị phân mà chúng tôi hỗ trợ. Chúng tôi khuyên bạn nên giới hạn phạm vi này xuống các hệ điều hành và kiến trúc mà bạn cần để tiết kiệm băng thông và thời gian cài đặt. Dưới đây là các tệp nhị phân có sẵn.Hệ điều hành Kiến trúc Lệnh Cập nhật Composer Post Tất cả Tất cả DefectiveCode\MJML\PullBinary::allDarwin (MacOS) arm64 DefectiveCode\MJML\PullBinary::darwin-arm64Darwin (MacOS) x64 DefectiveCode\MJML\PullBinary::darwin-x64Linux (glibc) arm64 DefectiveCode\MJML\PullBinary::linux-arm64Linux (glibc) x64 DefectiveCode\MJML\PullBinary::linux-x64Linux (musl) arm64 DefectiveCode\MJML\PullBinary::linux-arm64-muslLinux (musl) x64 DefectiveCode\MJML\PullBinary::linux-x64-musl -
Tiếp theo, cài đặt gói PHP bằng cách chạy lệnh composer sau:
composer require defectivecode/mjml -
Thế thôi! Nếu sử dụng Laravel, gói của chúng tôi sẽ tự động được cài đặt thông qua việc phát hiện gói của Laravel.
Sử dụng (Không có Laravel)
Xem việc sử dụng với Laravel bên dưới nếu bạn đang sử dụng Laravel.
Kết xuất MJML
Để kết xuất MJML, hãy đơn giản truyền chuỗi MJML của bạn vào phương thức render:
use DefectiveCode\MJML; $html = (new MJML)->render( '<mjml><mj-body><mj-section><mj-column><mj-text>Hello World</mj-text></mj-column></mj-section></mj-body></mjml>');
Xác thực MJML
Để xác thực MJML, hãy đơn giản truyền chuỗi MJML của bạn vào phương thức isValid:
use DefectiveCode\MJML; $isValid = (new MJML)->isValid( '<mjml><mj-body><mj-section><mj-column><mj-text>Hello World</mj-text></mj-column></mj-section></mj-body></mjml>');
Sử dụng (Có Laravel)
Kết xuất MJML
Để kết xuất MJML, hãy đơn giản truyền chuỗi MJML của bạn vào phương thức render trên facade MJML:
use DefectiveCode\MJML\Facades\MJML; $html = MJML::render( '<mjml><mj-body><mj-section><mj-column><mj-text>Hello World</mj-text></mj-column></mj-section></mj-body></mjml>');
Xác thực MJML
Để xác thực MJML, hãy đơn giản truyền chuỗi MJML của bạn vào phương thức isValid trên facade MJML:
use DefectiveCode\MJML\Facades\MJML; $isValid = MJML::isValid( '<mjml><mj-body><mj-section><mj-column><mj-text>Hello World</mj-text></mj-column></mj-section></mj-body></mjml>');
Cấu hình
Bạn có thể công bố tệp cấu hình bằng cách sử dụng lệnh sau:
php artisan vendor:publish --provider="DefectiveCode\MJML\MJMLServiceProvider"
Điều này sẽ tạo một tệp cấu hình mjml.php trong thư mục config của bạn. Tất cả các tùy chọn được liệt kê trong tệp cấu hình
sẽ được truyền vào đối tượng config khi bạn sử dụng facade MJML.
Cấu hình
Tất cả các tùy chọn cấu hình có thể được thiết lập bằng cách gọi các phương thức sau trực tiếp trên đối tượng MJML.
use DefectiveCode\MJML; $html = (new MJML) ->setMinify(true) ->setBeautify(false) ->render( '<mjml><mj-body><mj-section><mj-column><mj-text>Hello World</mj-text></mj-column></mj-section></mj-body></mjml>' );
Gói của chúng tôi theo cấu hình giống nhau với gói MJML chính thức ngoại trừ các điều sau đây:
preprocessors- Tùy chọn này không có sẵn. Xin hãy mở một yêu cầu kéo nếu bạn muốn thêm tùy chọn này.minifyOptions- Chúng tôi sử dụng một trình nén dựa trên PHP nhẹ thay vìhtml-minifier. Trình nén loại bỏ các bình luận (trừ các điều kiện Outlook), thu gọn khoảng trắng, và loại bỏ khoảng trắng giữa các thẻ.
Phông chữ
Gói của chúng tôi sử dụng các phông chữ sau theo mặc định:
- Open Sans: 'https://fonts.googleapis.com/css?family=Open+Sans:300,400,500,700'
- Droid Sans: 'https://fonts.googleapis.com/css?family=Droid+Sans:300,400,500,700'
- Lato: https://fonts.googleapis.com/css?family=Lato:300,400,500,700
- Roboto: https://fonts.googleapis.com/css?family=Roboto:300,400,500,700
- Ubuntu: https://fonts.googleapis.com/css?family=Ubuntu:300,400,500,700
Bạn có thể thay đổi các phông chữ bằng cách sử dụng các phương thức sau:
addFont(string $font, string $url)- Thêm một phông chữ vào danh sách phông chữ.removeFont(string $font)- Xóa một phông chữ khỏi danh sách phông chữ.setFonts(array $fonts)- Đặt danh sách phông chữ. Bạn nên cung cấp một mảng các phông chữ theo định dạng này:['font-name' => 'font-url'].
Bình luận
Các bình luận được giữ lại theo mặc định. Nếu bạn muốn xóa các bình luận, bạn có thể sử dụng phương thức removeComments().
Bạn cũng có thể khôi phục removeComments() bằng cách gọi phương thức keepComments().
Bỏ qua Các Bao gồm
Theo mặc định, gói của chúng tôi sẽ bao gồm bất kỳ thẻ mj-include nào. Bạn có thể điều chỉnh
hành vi này bằng cách gọi phương thức ignoreIncludes(bool $ignore).
Làm đẹp
Gói của chúng tôi sẽ làm đẹp HTML bằng cách sử dụng js-beautify với các tùy chọn
mặc định sau:
- indentSize: 2
- wrapAttributesIndentSize: 2
- maxPreserveNewline: 0
- preserveNewlines: false
Trong khi
js-beautifysử dụng snake_case để cung cấp các tùy chọn, bạn nên sử dụng camelCase khi sử dụng gói của chúng tôi. Chúng tôi đã lựa chọn điều này để giữ cho gói của chúng tôi nhất quán với phần còn lại của các tùy chọn cấu hình. Gói của chúng tôi sẽ tự động chuyển đổi các tùy chọn camelCase thành snake_case.
Bạn có thể ghi đè bất kỳ tùy chọn nào trong số này bằng cách cung cấp một cấu hình hợp lệ của js-beautify
bằng các phương thức sau:
setBeautifyOptions(array $options)- Đặt các tùy chọnjs-beautify.addBeautifyOption(string $option, mixed $value)- Thêm một tùy chọnjs-beautify.removeBeautifyOption(string $option)- Xóa một tùy chọnjs-beautify.
Rút gọn
Gói của chúng tôi sẽ rút gọn đầu ra HTML khi được kích hoạt. Rút gọn thực hiện các hành động sau:
- Loại bỏ các bình luận HTML (giữ lại các bình luận điều kiện của Outlook như
<!--[if mso]>) - Thu gọn nhiều ký tự khoảng trắng thành một khoảng trắng duy nhất
- Loại bỏ khoảng trắng giữa các thẻ HTML
Bạn có thể kích hoạt hoặc vô hiệu hóa rút gọn bằng cách gọi phương thức minify(bool $minify).
Tại sao lại rút gọn dựa trên PHP? Gói MJML chính thức sử dụng
html-minifiercho việc rút gọn, điều này có lỗ hổng ReDoS (CVE-2022-37620) mà không có bản sửa lỗi nào vì gói này không được bảo trì. Để tránh gói các phần phụ thuộc có lỗ hổng, chúng tôi đã chuyển việc rút gọn sang PHP sử dụng một triển khai nhẹ và an toàn.
Cấp độ Xác thực
Gói của chúng tôi sẽ xác thực MJML bằng cách sử dụng cấp độ xác thực soft theo mặc định. Bạn có thể thay đổi điều này
bằng cách sử dụng phương thức validationLevel(ValidationLevel $validationLevel). Các cấp độ xác thực có sẵn:
strict- Tài liệu của bạn sẽ được xác thực và không được kết xuất nếu có bất kỳ lỗi nàosoft- Tài liệu của bạn sẽ được xác thực và được kết xuất ngay cả khi có lỗiskip- Tài liệu của bạn được kết xuất mà không xác thực.
Đường dẫn Tệp
Gói của chúng tôi sẽ sử dụng thư mục . theo mặc định. Bạn có thể thay đổi điều này bằng cách gọi phương thức filePath(string $path).
Juice
Chúng tôi không cung cấp bất kỳ tùy chọn juice nào theo mặc định. Bạn có thể thêm các tùy chọn juice bằng cách sử dụng các phương thức sau:
setJuiceOptions(array $options)- Đặt các tùy chọn juice.addJuiceOption(string $option, mixed $value)- Thêm một tùy chọn juice.removeJuiceOption(string $option)- Xóa một tùy chọn juice.setJuicePreserveTags(array $tags)- Đặt các thẻ bảo tồn juice.addJuicePreserveTag(string $tag, mixed $value)- Thêm một thẻ bảo tồn juice.removeJuicePreserveTag(string $tag)- Xóa một thẻ bảo tồn juice.
Hướng Dẫn Hỗ Trợ
Cảm ơn bạn đã chọn gói mã nguồn mở của chúng tôi! Vui lòng dành chút thời gian để xem qua các hướng dẫn hỗ trợ này. Chúng sẽ giúp bạn tận dụng tối đa dự án của chúng tôi.
Hỗ Trợ Được Điều Hành Bởi Cộng Đồng
Dự án mã nguồn mở của chúng tôi được thúc đẩy bởi cộng đồng tuyệt vời của chúng tôi. Nếu bạn có câu hỏi hoặc cần trợ giúp, StackOverflow và các tài nguyên trực tuyến khác là lựa chọn tốt nhất của bạn.
Lỗi và Ưu Tiên Tính Năng
Thực tế khi quản lý một dự án mã nguồn mở có nghĩa là chúng tôi không thể giải quyết ngay lập tức mọi lỗi hoặc yêu cầu tính năng được báo cáo. Chúng tôi ưu tiên các vấn đề theo thứ tự sau:
1. Lỗi Ảnh Hưởng Đến Sản Phẩm Trả Phí Của Chúng Tôi
Các lỗi ảnh hưởng đến sản phẩm trả phí của chúng tôi luôn là ưu tiên hàng đầu. Trong một số trường hợp, chúng tôi có thể chỉ giải quyết các lỗi ảnh hưởng trực tiếp đến chúng tôi.
2. Yêu Cầu Kéo Của Cộng Đồng
Nếu bạn đã xác định một lỗi và có giải pháp, vui lòng gửi yêu cầu kéo. Sau các vấn đề ảnh hưởng đến sản phẩm của chúng tôi, chúng tôi dành ưu tiên cao nhất tiếp theo cho các sửa lỗi do cộng đồng thực hiện. Sau khi được xem xét và phê duyệt, chúng tôi sẽ hợp nhất giải pháp của bạn và ghi nhận đóng góp của bạn.
3. Hỗ Trợ Tài Chính
Đối với các vấn đề ngoài các danh mục đã nêu, bạn có thể chọn tài trợ cho việc giải quyết của chúng. Mỗi vấn đề mở đều liên kết với một mẫu đơn đặt hàng nơi bạn có thể đóng góp tài chính. Chúng tôi ưu tiên các vấn đề này dựa trên số tiền tài trợ được cung cấp.
Đóng Góp Của Cộng Đồng
Mã nguồn mở phát triển mạnh khi cộng đồng của nó hoạt động tích cực. Ngay cả khi bạn không sửa lỗi, hãy cân nhắc đóng góp thông qua cải tiến mã, cập nhật tài liệu, hướng dẫn, hoặc bằng cách hỗ trợ những người khác trong các kênh cộng đồng. Chúng tôi rất khuyến khích mọi người, với tư cách là một cộng đồng, giúp đỡ trong công việc mã nguồn mở.
Nhấn mạnh lại, DefectiveCode sẽ ưu tiên các lỗi dựa trên cách chúng ảnh hưởng đến các sản phẩm trả phí của chúng tôi, yêu cầu kéo của cộng đồng và sự hỗ trợ tài chính nhận được cho các vấn đề.
Giấy phép - Giấy phép MIT
Bản quyền © Defective Code, LLC. Tất cả các quyền được bảo lưu
Permission là được cấp miễn phí, cho bất kỳ người nào nhận được một bản sao của phần mềm này và các tài liệu liên quan (gọi là "Phần mềm"), được phép sử dụng Phần mềm mà không có hạn chế, bao gồm nhưng không giới hạn các quyền sử dụng, sao chép, chỉnh sửa, hợp nhất, công bố, phân phối, cấp phép lại, và/hoặc bán các bản sao của Phần mềm, và cho phép những người mà Phần mềm được cung cấp có thể làm như vậy, với điều kiện là:
Thông báo bản quyền ở trên và thông báo phép này sẽ được bao gồm trong tất cả các bản sao hoặc phần đáng kể của Phần mềm.
PHẦN MỀM ĐƯỢC CUNG CẤP "NHƯ THẾ", KHÔNG CÓ BẢO ĐẢM DƯỚI BẤT KỲ HÌNH THỨC NÀO, RÕ RÀNG HAY NGỤ Ý, BAO GỒM NHƯNG KHÔNG GIỚI HẠN ĐẾN CÁC BẢO ĐẢM VỀ THƯƠNG MẠI, PHÙ HỢP CHO MỘT MỤC ĐÍCH CỤ THỂ VÀ KHÔNG XÂM PHẠM. TRONG BẤT KỲ TRƯỜNG HỢP NÀO, CÁC TÁC GIẢ HOẶC CÁC CHỦ SỞ HỮU BẢN QUYỀN KHÔNG CHỊU TRÁCH NHIỆM VỀ BẤT KỲ KHIẾU NẠI, THIỆT HẠI HOẶC TRÁCH NHIỆM KHÁC, DÙ TRONG MỘT HÀNH ĐỘNG HỢP ĐỒNG, LỖI HOẶC CÁC HÌNH THỨC KHÁC, PHÁT SINH TỪ, RA HOẶC LIÊN QUAN ĐẾN PHẦN MỀM HOẶC VIỆC SỬ DỤNG HAY CÁC GIAO DỊCH KHÁC LIÊN QUAN ĐẾN PHẦN MỀM.