English | العربية | বাংলা | Bosanski | Deutsch | Español | Français | हिन्दी | Italiano | 日本語 | 한국어 | मराठी | Português | Русский | Kiswahili | தமிழ் | తెలుగు | Türkçe | اردو | Tiếng Việt | 中文
- الترقية
- المقدمة
- التثبيت
- الاستخدام (بدون Laravel)
- الاستخدام (مع Laravel)
- التكوين
- إرشادات الدعم
- الترخيص - MIT License
الترقية
إذا كنت تقوم بالترقية من إصدار سابق، يرجى الاطلاع على دليل الترقية للتغييرات الهامة وخطوات الانتقال.
المقدمة
MJML هي لغة ترميز مصممة خصيصًا لتبسيط عملية ترميز الرسائل الإلكترونية المتجاوبة. يضمن تركيبها الدلالي سهولة وبساطة، بينما تعمل مكتبتها الواسعة من المكونات القياسية على تسريع تطوير الرسائل وتقليل تعقيد قاعدة كود بريدك الإلكتروني. يقوم المحرك مفتوح المصدر الخاص بـ MJML بإنشاء HTML عالي الجودة ومتجاوب يتماشى مع أفضل الممارسات. إذا كنت قد واجهت الإحباطات أثناء العمل مع Outlook، فإن هذه الحزمة مصممة خصيصًا لك.
تعمل تطبيقات MJML الخاصة بنا كغلاف لواجهة برمجة التطبيقات الرسمية لـ MJML. إنها تتيح تجميع MJML في HTML بسهولة مباشرة داخل PHP، بدون الحاجة إلى NodeJS. هذه الحزمة مثالية لتطبيقات PHP التي ترغب في دمج MJML دون عناء تثبيت NodeJS وواجهة سطر الأوامر الخاصة بـ MJML.
مثال
// بدون 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 مصغر(new MJML)->minify()->render( '<mjml><mj-body><mj-section><mj-column><mj-text>Hello World</mj-text></mj-column></mj-section></mj-body></mjml>'); // مع LaravelMJML::render( '<mjml><mj-body><mj-section><mj-column><mj-text>Hello World</mj-text></mj-column></mj-section></mj-body></mjml>'); // مع Laravel وHTML مصغرMJML::minify()->render( '<mjml><mj-body><mj-section><mj-column><mj-text>Hello World</mj-text></mj-column></mj-section></mj-body></mjml>');
التثبيت
-
أولاً، أضف ما يلي إلى ملف
composer.jsonالخاص بك لتوجيه حزمة لدينا إلى سحب الملفات الثنائية الصحيحة لنظام التشغيل الخاص بك عند تثبيت حزمة لدينا. سيتم تنزيل الملفات الثنائية بعد تشغيلك لـinstallأوupdateأوdump-autoload.{"post-autoload-dump": ["DefectiveCode\\MJML\\PullBinary::all"]}سيتم الحصول على الملف الثنائي لـ MJML من CDN الخاص بنا وحفظه في مجلد "bin" لهذه الحزمة خلال تثبيت أو تحديث Composer. تأكد من تحميل الملفات الثنائية اللازمة لكلا من بيئاتك المحلية والإنتاج.
بشكل افتراضي، سيقوم
allبسحب جميع الملفات الثنائية التي ندعمها. نوصي بتقليص هذه العملية إلى أنظمة التشغيل والأنظمة المعمارية التي تحتاجها لتوفير النطاق الترددي وأوقات التثبيت. فيما يلي الملفات الثنائية المتاحة.نظام التشغيل الهندسة المعمارية أمر تحديث Composer بعد التحديث الكل الكل 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 -
بعد ذلك، قم بتثبيت حزمة PHP عن طريق تشغيل أمر composer التالي:
composer require defectivecode/mjml -
هذا كل شيء! إذا كنت تستخدم Laravel، ستقوم حزمة لدينا بالتثبيت تلقائيًا باستخدام اكتشاف حزم Laravel.
الاستخدام (بدون Laravel)
راجع الاستخدام مع Laravel أدناه إذا كنت تستخدم Laravel.
عرض MJML
لعرض MJML، ما عليك سوى تمرير سلسلة MJML الخاصة بك إلى طريقة 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>');
التحقق من صحة MJML
للتحقق من صحة MJML، ما عليك سوى تمرير سلسلة MJML الخاصة بك إلى طريقة 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>');
الاستخدام (مع Laravel)
عرض MJML
لعرض MJML، ما عليك سوى تمرير سلسلة MJML الخاصة بك إلى render على واجهة 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>');
التحقق من صحة MJML
للتحقق من صحة MJML، ما عليك سوى تمرير سلسلة MJML الخاصة بك إلى طريقة isValid على واجهة 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>');
التكوين
يمكنك نشر ملف التكوين باستخدام الأمر التالي:
php artisan vendor:publish --provider="DefectiveCode\MJML\MJMLServiceProvider"
سيؤدي ذلك إلى إنشاء ملف تكوين mjml.php في مجلد config الخاص بك. جميع الخيارات المدرجة في ملف التكوين تُمرر إلى كائن config عند استخدام واجهة MJML.
التكوين
يمكن تعيين جميع خيارات التكوين من خلال استدعاء الطرق التالية مباشرة على كائن 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>' );
تتبع حزمة لدينا نفس التكوين كما هو الحال مع حزمة MJML الرسمية باستثناء ما يلي:
preprocessors- هذه الخيار غير متوفر. يرجى فتح طلب سحب إذا كنت ترغب في إضافة هذا الخيار.minifyOptions- نستخدم مكبر PHP خفيف الوزن بدلاً منhtml-minifier. يقوم المكبر بإزالة التعليقات (باستثناء الشروط الخاصة بـ Outlook)، ويقصي الفراغات، ويزيل الفراغات بين العلامات.
الخطوط
تستخدم حزمة لدينا الخطوط التالية بشكل افتراضي:
- 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
يمكنك تغيير الخطوط باستخدام الطرق التالية:
addFont(string $font, string $url)- إضافة خط إلى قائمة الخطوط.removeFont(string$font)- إزالة خط من قائمة الخطوط.setFonts(array $fonts)- تعيين قائمة الخطوط. يجب عليك تقديم مصفوفة من الخطوط بصيغة:['font-name' => 'font-url'].
التعليقات
تُحتفظ بالتعليقات بشكل افتراضي. إذا كنت ترغب في إزالة التعليقات، يمكنك استخدام طريقة removeComments().
يمكنك أيضًا التراجع عن removeComments() من خلال استدعاء طريقة keepComments().
تجاهل الشمول
بشكل افتراضي، ستقوم حزمة لدينا بتضمين أي علامات mj-include. يمكنك تعديل هذا السلوك من خلال استدعاء طريقة ignoreIncludes(bool $ignore).
التجمل
ستقوم حزمة لدينا بتجميل HTML باستخدام js-beautify مع الخيارات الافتراضية التالية:
- indentSize: 2
- wrapAttributesIndentSize: 2
- maxPreserveNewline: 0
- preserveNewlines: false
بينما يستخدم
js-beautifysnake_case لتقديم الخيارات، يجب عليك استخدام camelCase عند استخدام حزمة لدينا. قمنا بهذا الخيار لضمان تناسق حزمة لدينا مع بقية خيارات التكوين. ستقوم حزمة لدينا تلقائيًا بتحويل خيارات camelCase إلى snake_case.
يمكنك تجاوز أي من هذه الخيارات من خلال تقديم تكوين js-beautify صالح باستخدام الطرق التالية:
setBeautifyOptions(array $options)- تعيين خياراتjs-beautify.addBeautifyOption(string $option, mixed $value)- إضافة خيارjs-beautify.removeBeautifyOption(string $option)- إزالة خيارjs-beautify.
المصغرات
ستقوم حزمة لدينا بتصغير مخرجات HTML عند تفعيلها. يقوم التصغير بما يلي:
- إزالة التعليقات HTML (تحافظ على تعليقات Outlook الشرطية مثل
<!--[if mso]>) - تقليص عدة أحرف فراغ إلى فراغ واحد
- إزالة الفراغات بين علامات HTML
يمكنك تفعيل أو تعطيل التصغير من خلال استدعاء طريقة minify(bool $minify).
لماذا التصغير القائم على PHP؟ تستخدم حزمة MJML الرسمية
html-minifierللتصغير، والتي تحتوي على ثغرة ReDoS (CVE-2022-37620) بدون أي تصحيح متاح حيث لم تعد الحزمة صيانة. لتجنب تجميع الاعتمادات القابلة للاستغلال، قمنا بنقل التصغير إلى PHP باستخدام تنفيذ خفيف وآمن.
مستوى التحقق
ستقوم حزمة لدينا بالتحقق من MJML باستخدام مستوى التحقق soft بشكل افتراضي. يمكنك تغيير ذلك باستخدام طريقة validationLevel(ValidationLevel $validationLevel) . المستويات المتاحة للتحقق هي:
strict- يتم التحقق من مستندك ولا يتم تقديمه إذا كان به أي خطأsoft- يتم التحقق من مستندك ويتم تقديمه، حتى إذا كان به أخطاءskip- يتم تقديم مستندك دون المرور عبر التحقق.
مسار الملف
ستستخدم حزمة لدينا الدليل . بشكل افتراضي. يمكنك تغيير ذلك من خلال استدعاء طريقة filePath(string $path).
Juice
نحن لا نقدم أي خيارات juice بشكل افتراضي. يمكنك إضافة خيارات juice باستخدام الطرق التالية:
setJuiceOptions(array $options)- تعيين خيارات juice.addJuiceOption(string $option, mixed $value)- إضافة خيار juice.removeJuiceOption(string $option)- إزالة خيار juice.setJuicePreserveTags(array $tags)- تعيين علامات الحفاظ على juice.addJuicePreserveTag(string $tag, mixed $value)- إضافة علامة الحفاظ على juice.removeJuicePreserveTag(string $tag)- إزالة علامة الحفاظ على juice.
إرشادات الدعم
شكرًا لاختيارك حزمتنا مفتوحة المصدر! يرجى أخذ لحظة للاطلاع على هذه الإرشادات الخاصة بالدعم. إنها ستساعدك على الاستفادة القصوى من مشروعنا.
دعم مدفوع من المجتمع
مشروعنا مفتوح المصدر مدعوم من مجتمعنا الرائع. إذا كانت لديك أسئلة أو تحتاج إلى مساعدة، فإن StackOverflow وغيرها من الموارد عبر الإنترنت هي أفضل الخيارات لديك.
الأخطاء، وأولوية الميزات
حقيقة إدارة مشروع مفتوح المصدر تعني أنه لا يمكننا معالجة كل خطأ أو طلب ميزة مبلّغ عنه على الفور. نحن نحدد أولويات المشكلات بالترتيب التالي:
1. الأخطاء التي تؤثر على منتجاتنا المدفوعة
الأخطاء التي تؤثر على منتجاتنا المدفوعة ستكون دائمًا أولويتنا القصوى. في بعض الحالات، قد نعمل فقط على معالجة الأخطاء التي تؤثر علينا بشكل مباشر.
2. طلبات السحب من المجتمع
إذا كنت قد حددت خطأ ولديك حل، يرجى تقديم طلب سحب. بعد معالجة المشكلات التي تؤثر على منتجاتنا، نمنح الأولوية الأعلى لهذه الإصلاحات المدفوعة من المجتمع. بمجرد مراجعة الحل والموافقة عليه، سنقوم بدمجه وسنُعطيك الفضل لمساهمتك.
3. الدعم المالي
بالنسبة للمشكلات خارج الفئات المذكورة، يمكنك اختيار تمويل حلها. كل مشكلة مفتوحة مرتبطة بنموذج طلب يمكنك من خلاله المساهمة ماليًا. نحن نحدد أولويات هذه المشكلات بناءً على المبلغ المالي المقدم.
مساهمات المجتمع
تزدهر المصادر المفتوحة عندما يكون المجتمع نشطًا. حتى لو لم تكن تصلح الأخطاء، فكر في المساهمة من خلال تحسينات الكود، أو تحديث الوثائق، أو إنشاء دروس، أو بمساعدة الآخرين في قنوات المجتمع. نحن نشجع بشكل كبير الجميع، كمجتمع، على تقديم الدعم للعمل المفتوح المصدر.
لإعادة التأكيد، ستحظى DefectiveCode بأولوية الأخطاء استنادًا إلى كيفية تأثيرها على منتجاتنا المدفوعة، وطلبات سحب المجتمع، والدعم المالي الذي تم تلقيه للمشكلات.
الترخيص - MIT License
حقوق الطبع والنشر © Defective Code, LLC. جميع الحقوق محفوظة
يتم منح الإذن بموجب هذا، مجانًا، لأي شخص يحصل على نسخة من هذا البرنامج وملفات الوثائق المرتبطة (الـ"برنامج")، للتعامل في البرنامج دون قيود، بما في ذلك بدون حصر الحقوق في الاستخدام والنسخ والتعديل والدمج والنشر والتوزيع والتراخيص الفرعية و/أو بيع نسخ من البرنامج، والسماح للأشخاص الذين تم تقديم البرنامج لهم بذلك، بشرط الالتزام بالشروط التالية:
يجب تضمين إشعار حقوق الطبع والنشر أعلاه وإشعار الإذن هذا في جميع النسخ أو الأجزاء الجوهرية من البرنامج.
يتم توفير البرنامج "كما هو"، دون أي ضمان من أي نوع، صريح أو ضمني، بما في ذلك ولكن لا تقتصر على ضمانات القابلية للتسويق، والملاءمة لغرض معين وعدم الانتهاك. في أي حال من الأحوال، لا يتحمل المؤلفون أو أصحاب حقوق الطبع المسؤولية عن أي مطالبة أو أضرار أو مسؤوليات أخرى، سواء كانت في إطار عقد أو ضرر أو خلاف ذلك، ناشئة عن أو نتيجة عن أو تتعلق بالبرنامج أو الاستخدام أو التعاملات الأخرى في البرنامج.