Advertisement
  1. Web Design
  2. HTML/CSS
  3. HTML

4 أسباب لاختيار ProcessWire كجهاز CMS التالي 

Scroll to top
Read Time: 14 min

() translation by (you can also view the original English article)

قبل بضعة أسابيع ، عثرت على مقالة A List Apart بعنوان "إدارة نظام إدارة المحتوى الخاص بك" .  ويقدم توصيات حول كيفية الحد من حرية المستخدمين وتخصيصها في الخلفية لنظام إدارة المحتوى (CMS) بهدف جعلها سهلة الاستخدام قدر الإمكان. 

قراءة هذه التوصيات ومقارنتها مع الإمكانيات التقنية للاعبين الرئيسيين في المشهد الحالي CMS ، أرى العديد من القيود.  لا تمتلك معظم أنظمة إدارة المحتوى هذه الأنواع من الإمكانات ولا يمكنها توفير مستوى الخيارات لتخصيص واجهة مستخدم خلفية بشكل مثالي.  ولكن مع العمل مع ProcessWire منذ بضع سنوات ، أعتقد أنني وجدت ملجأ للمطورين والمستخدمين الذين يريدون ذلك بالضبط. 

Screenshot of the ProcessWire websiteScreenshot of the ProcessWire websiteScreenshot of the ProcessWire website

ProcessWire هو نظام PHP جديد ومفتوح المصدر ومجاني ومفتوح المصدر وإطار إدارة المحتوى (CMF).  يعتمد في جوهره على بعض المفاهيم البسيطة ويوفر أدوات سهلة الاستخدام وقوية للغاية في نفس الوقت.  في هذه المقالة العامة ، أريد أن أقدم لكم بعضًا من هذه الأدوات والمفاهيم.  فيما يلي أربعة أسباب لاختيار ProcessWire كبرنامج إدارة المحتوى التالي. 

1. يعتمد على ثلاثة مفاهيم أساسية بسيطة: الصفحات ، الحقول ، والقوالب

ويستند المدخلات والمخرجات من البيانات إلى ثلاثة مفاهيم أساسية فقط ، ولا شيء آخر.  وهذا يعني أنه بمجرد فهمك لهذه المفاهيم ، فإنك تفهم بشكل أساسي كل شيء عن ProcessWire والفلسفة الكامنة وراءه.  رائع جدا ، أليس كذلك؟  لذا، اسمحوا لي أن أعرض لكم ل صفحات ، حقول و القوالب . 

صفحات 

في صفحة البداية الخاصة بتثبيت ProcessWire ، سترى شجرة صفحة واحدة ذات تسلسل هرمي: 

ProcessWire installationProcessWire installationProcessWire installation

تسمى الارتباطات التي تراها في الشجرة بالصفحات .   عادةً ما تعكس الصفحات في النهاية الخلفية الصفحة المعروضة في الواجهة الأمامية.  على سبيل المثال ، يمكن الدخول إلى صفحة "حول" في لقطة الشاشة في الواجهة الأمامية عن طريق فتح your-domain.com/about/ . 

لكن الصفحات لا يجب أن يكون لها نظير في الواجهة الأمامية.  كما يمكن أن تكون موجودة ببساطة في النهاية الخلفية وتكون بمثابة حاويات بيانات للصفحات الأخرى.  دع الجملة التي قرأتها توشك على الإغلاق: مفهوم الصفحات المتاح فقط في النهاية الخلفية قوي جدًا لأنه يفتح إمكانيات لا نهاية لها في كيفية تنظيم موقعك على الويب والتفاعل مع البيانات المدخلة. 

يمكنك - ويجب - استخدام الصفحات لكل شيء تقريبًا.  على سبيل المثال ، يمكنك الحصول على صفحة إعدادات مخفية ، حيث يمكنك حفظ أشياء مثل التنقل الرئيسي أو النص العام مثل الاسم والشعار وإشعار حقوق الطبع والنشر وما إلى ذلك لموقعك على الويب.  مثال آخر هو العلامات وفئات مشاركات المدونة (ما يعادل تصنيفات في WordPress).  يمكنك فقط إنشاء صفحات لكل علامة أو فئة واحدة في مشاركة مدونة.  اسمحوا لي أن أقتبس جوس Sanglier فيما يتعلق بالصفحات في ProcessWire: 

 يتم استخدام الصفحات في ProcessWire لجميع أنواع الأشياء.   image.   يمكن استخدامها كأولياء مجموعة لصفحات أخرى.   image.   ويمكن حتى استخدامها في تحديدات بسيطة من القائمة المنسدلة - فقط لتزويد العلامة والقيمة. 

دعونا نفتح صفحة "حول" المذكورة أعلاه وتحررها. 

The About PageThe About PageThe About Page

أنت الآن تنظر إلى المفهوم الأساسي التالي لـ ProcessWire: الحقول. 

مجالات 

الصفحات تحتوي على حقول .   لكن يجب أن نرى الحقول من زاويتين مختلفتين.   فهي بصريا جزءًا من الصفحة ، لأنك عندما تفتح صفحة ترى الحقول التي يمكنك التعامل معها.   من الناحية الفنية ، تعد هذه الحقول جزءًا من نموذج الصفحة.  سوف أصف مفهوم القوالب فيما بعد ؛ دعونا نفهم أولا الحقول. 

الحقول في ProcessWire هي الحاويات التي تضع فيها البيانات أو التي تحدد البيانات منها ، مثل النصوص ، النصوص ، الأرقام ، رسائل البريد الإلكتروني ، تحميلات الملفات ، الصفحات الأخرى ، إلخ. الأمر متروك تماما لك كم عدد الحقول التي تحتوي عليها الصفحة.   يمكن أن يحتوي على واحد فقط (على سبيل المثال حقل لعنوان الصفحة) ، أو لا توجد حقول على الإطلاق (ليست مريحة للغاية) ، أو أكثر من 50 أو 100 حقل. 

لا يحتوي ProcessWire على فكرة الحقول المخصصة مثل WordPress ، لأن كل حقل في ProcessWire هو حقل مخصص .   يمكنك إنشاء حقل وتحديد نوع ما تريده (راجع لقطة الشاشة أدناه).   هذا هو! 

ProcessWire fieldsProcessWire fieldsProcessWire fields

يمكن إعطاء حقل تصنيفًا ووصفًا وبعض الملاحظات للحصول على معلومات إضافية تظهر أسفلها.   كل نوع حقل له إعداداته الخاصة.   لنلق نظرة على ثلاثة أنواع من الحقول وبعض الإعدادات التي يمكنك إجراؤها للتعبير عن ذلك: 

  • نوع حقل Textarea : يمكنك تحديد ما إذا كان يتم عرضه على هيئة نص عادي أو كمحرر نص منسق (CKEditor افتراضيًا).  يمكنك تحديد الأزرار التي يجب أن تظهر في شريط أدوات CKEditor وحتى إدخال إعدادات التكوين المخصصة مباشرةً في واجهة المستخدم الرسومية للمشرف. 
  • نوع حقل الصفحة : يمكنك ربط صفحة واحدة بصفحة أخرى وبالتالي إنشاء علاقة بينهما.   يمكنك إما ربط صفحة واحدة (علاقة رأس برأس) أو صفحات متعددة (علاقة رأس بأطراف).   يمكنك حتى السماح بإنشاء صفحات جديدة من حقل صفحة. 
  • نوع حقل صورة : يمكنك تحديد نوع الصورة (ملحق) الذي يمكن تحميله.   يمكنك تحديد الحد الأدنى أو / أو الحد الأقصى للارتفاع والعرض الذي يجب أن يكون عليه التأهل للتحميل. 

خلاصة القول هي: كل حقل تقوم بإنشائه قابل للتخصيص بدرجة عالية لتلائم تمامًا احتياجاتك واحتياجات الأشخاص الذين يقومون بإنشاء المحتوى وتحريره في ما يلي. 

ولكن كيف تعرف الصفحة ما هي الحقول التي لديها في حد ذاتها؟   لذلك ، دعونا نلقي نظرة على القوالب. 

قوالب 

عندما تقوم بإنشاء صفحة جديدة ، يجب عليك تحديد قالب .   يحتوي القالب على جميع المعلومات التي تحتاج الصفحة إلى معرفتها عن محتوياتها (ما هي الحقول التي لديها ، وكيف يتم تقديم هذه الحقول وكيف تتصرف). 

فيما يلي سترى حقول القالب الأساسي للصفحة . 

ProcessWrite templatesProcessWrite templatesProcessWrite templates

يؤدي النقر على حقل إلى فتح نافذة مشروطة ، حيث يمكنك تعديل إعدادات الحقل بدقة لهذا القالب. 

ProcessWire tempalte attributesProcessWire tempalte attributesProcessWire tempalte attributes

يمكن أن يحتوي القالب على ملف PHP فعلي له نفس الاسم المرتبط به.  توجد ملفات القوالب هذه في / site / templates / .   في مثل هذا الملف ، تكتب شفرة PHP وترميز HTML الذي يؤدي في النهاية إلى إخراج محتويات الصفحة وعرض العناصر التي يراها الزائر في صفحة موقعك على الويب. 

إذا كان القالب لا يحتوي على مثل هذا الملف المطابق ، فلا يمكن عرض صفحة مقترنة به في الواجهة الأمامية من تلقاء نفسه.   هذا لا يعني أنه لا يمكنك الحصول على بيانات تلك الصفحة وإخراجها في مكان آخر - يمكنك القيام بذلك عن طريق استخدام ملف قالب موجود لصفحة أخرى. 

دعونا نلخص العلاقة الفنية بين الصفحات والحقول والقوالب: تقوم بإضافة حقول إلى القوالب ، وتقوم بتحديد قالب عند إنشاء صفحات جديدة.   الحقول التي تراها عند تحرير صفحة هي الحقول التي أضفتها إلى القالب المحدد. 

2. لديه واجهة برمجة تطبيقات تقع في حب 

ستتكون الشفرة في ملفات القالب في الغالب من عدد قليل من بنى PHP الأساسية مثل تعيين القيم للمتغيرات ، إذا كانت الظروف ، أو حلقات foreach وترميز HTML من ناحية ، والعمل مع API الخاصة بـ ProcessWire من ناحية أخرى. 

يمكنك اعتبار واجهة برمجة التطبيقات بمثابة jQuery لـ PHP.   يوفر أساليب ، محددات ، تسلسل (واجهة بطلاقة) وقدرات عبور. 

ربما تكون واجهة برمجة التطبيقات هي الشيء الوحيد الذي يثير دهشتي أكثر حول ProcessWire: إنه سهل الاستخدام وسهل الفهم والتعبير وقوي في نفس الوقت.  ولكن الأهم من ذلك أنه يتيح لك تطوير بطريقة سريعة وغير معقدة ، ويكون لديك متعة في التفاعل معها.   إنه أمر منطقي. 

  . يعد API Cheatsheet مرجعًا رائعًا.   ويعرض كل الطرق المتاحة التي يمكنك العمل بها. 

ProcessWire APIProcessWire APIProcessWire API

والآن اسمحوا لي أن أعرض لكم لاثنين من المتغيرات تتعرض لAPI التي سوف تتعامل مع أكثر خلال تطوير قالب: $ صفحة و $ الصفحات . 

متغير صفحة $ 

على الصفحة $ متغير يحتوي على كافة مجالات محددة إلى صفحة يتم عرضها.  image. 

لكن كيف يمكنك الوصول إلى حقول الصفحة؟  دعونا الغوص الصحيح من خلال النظر في بعض الأمثلة البسيطة.

إخراج محتوى الحقل النصي المسمى title :

1
echo $page->get("title");
2
// or

3
echo $page->title;

عرض اسم قالب الصفحة:

1
echo "This page is using the template: " . $page->template->name;
2
// or

3
echo "This page is using the template: {$page->template->name}";

إنشاء التنقل التنقل:

1
echo "<ul>";
2
foreach ($page->parents as $parent) 
3
    echo "<li><a href='{$parent->url}'>{$parent->title}</a></li>";
4
echo "</ul>";

منذ الإصدار 2.5.27 ، يمكنك أيضًا كتابة ما سبق على النحو التالي:

1
echo "<ul>";
2
echo $page->parents->each("<li><a href='{url}'>{title}</a></li>");
3
echo "</ul>";

لا تخرج صورة إلا إذا تم تحميلها فعليًا:

1
if ($page->image) echo "<img src='{$page->image->url}'>";

ملاحظة: يجب عليك تعيين حقل الصورة الخاص بك بحيث يحتوي على صورة واحدة فقط حتى يعمل ذلك.

في ما يلي بعض الأمثلة على وقت تعيين حقل صورة بحيث يحتوي على صور متعددة.

انتزاع وإخراج الصورة الأولى:

1
$image = $page->images->first();
2
3
if ($image) echo "<img src='{$image->url}'>";

انتزاع وإخراج صورة عشوائية:

1
$image = $page->images->getRandom();
2
3
if ($image) echo "<img src='{$image->url}'>"; 

قم بتدوير جميع الصور ، قم بإنشاء صورة كبيرة بعرض 500 بيكسل مع ارتفاع نسبي ، وصورة مصغرة عند 100 × 100 مع إعدادات محددة للجودة والضبط ، ومن ثم يكون لديك رابط الصورة المصغرة للمتغير الكبير:

1
$options = array(
2
    "quality" => 90,
3
    "cropping" => "southeast"
4
);
5
6
foreach ($page->images as $image) {
7
    $large = $image->width(500);
8
    $thumb = $image->size(100, 100, $options);
9
    echo "<a href='{$large->url}'><img src='{$thumb->url}'></a>";
10
}

ملاحظة: سوف تقوم ProcessWire بإنشاء صورك بأي حجم على الطاير ثم الاحتفاظ بها مؤقتًا.

الصفحات $ المتغير

على صفحات $ المتغير هو المرجعية لجميع صفحات موقعك.  يتيح لك ذلك الوصول إلى كل محتوى موقعك وصفحاته من أي مكان تريده.

للحصول على الأمثلة التالية ، سأشير إلى الموقع التجريبي القياسي لـ ProcessWireوالذي يوفر مجموعة من ناطحات السحاب في الولايات المتحدة.

الحصول على صفحة محددة وإخراج عنوانها:

1
echo $pages->get("/cities/chicago/sears-tower/")->title;

ملاحظة: / cities / chicago / sears-tower / هو المسار الكامل الذي يشير إلى صفحة Sears Tower في التسلسل الهرمي لشجرة صفحة ProcessWire.

ابحث عن جميع ناطحات السحاب التي يزيد ارتفاعها عن 500 قدم ، وأقل من أو يساوي 1000 قدم:

1
$skyscrapers = $pages->find("template=skyscraper, height>500, height<=1000");

ملاحظة: الارتفاع هو حقل موجود داخل نموذج سكاي سكريبر .

البحث عن جميع ناطحات السحاب التي بنيت قبل عام 1950 مع أكثر من 10 طوابق ، مرتبة حسب تنازلي السنة ، ثم الطوابق تنازلي:

1
$skyscrapers = $pages->find("template=skyscraper, year<1950, floors>=10, sort=-year, sort=-floors");

ملاحظة: السنة و الأرضيات حقول الموجودة داخل قالب ناطحة سحاب .

البحث عن ناطحات السحاب في شيكاغو مع 60+ طوابق ، مصنفة حسب الطوابق تصاعدي:

1
$skyscrapers = $pages->get("/cities/chicago/")->find("floors>=60, sort=floors");

البحث عن ناطحات السحاب من قبل المعماريين ديفيد تشايلدز أو رينزو بيانو ، والفرز حسب الارتفاع تنازلي:

1
$david = $pages->get("/architects/david-childs/");
2
$renzo = $pages->get("/architects/renzo-piano/");
3
$skyscrapers = $pages->find("template=skyscraper, architects=$david|$renzo, sort=-height");

ملاحظة: المهندسين المعماريين هو حقل موجود داخل نموذج سكاي سكريبر .

3. تم بناؤه حول بنية قابلة للتوسعة ويمكن تمديدها بسهولة

تتكون ProcessWire نفسها من إطار أساسي صغير (ضع في اعتبارك جوهر ProcessWire الذي يمكّن الوظائف الأساسية) ومجموعة من الوحدات المعبأة مسبقًا ، والتي تأتي مع كل عملية تثبيت. يتم تثبيت بعض هذه الوحدات الأساسية ، ويتم إلغاء تثبيت البعض الآخر بشكل افتراضي. فكر في وحدات ProcessWire مثل إضافات WordPress: فهي تعمل على توسيع النظام وتخصيصه.

تتميز الطبيعة المعيارية لـ ProcessWire ببعض المزايا الرائعة:

  • وقاعدة الشفرات هي أكثر قابلية للإصلاح لأن الوظائف الأساسية معزولة وفواصل منفصلة عن أجزاء أخرى من النظام ، الأمر الذي يزيد أيضاً من الأمن العام إلى حد كبير .
  • يجري تبسيط تطوير الميزات الجديدة ، ويمكن استهداف الأخطاء وتثبيتها بسهولة أكبر وبسرعة أكبر.
  • عادةً ما تكون الترقية إلى إصدارات أحدث من ProcessWire أو وحدات مفردة غير تفكير ، ولا داعي للقلق بعد كسر كل شيء.

تركيب الوحدات

تثبيت وحدة نمطية أمر سهل مثل سحب ملفات الوحدة إلى الدليل / site / modules / ثم النقر على التثبيت في واجهة المستخدم الرسومية للمشرف. ولكن هناك في الواقع العديد من الطرق لتثبيت وحدة نمطية من دليل الوحدات .

على سبيل المثال ، يمكنك تثبيت " إدارة الوحدات النمطية" ، التي تمكنك من استعراض وحدات البرامج وتنزيلها وتثبيتها وتحديثها في واجهة المستخدم الرسومية للمشرف.

كمية الوحدات: الجودة على الكمية

في وقت الكتابة ، يوجد حوالي 370 وحدة لـ ProcessWire. في وقت الكتابة ، يوجد حوالي 370 وحدة لـ ProcessWire.  بعد ذلك ، يمكن للمرء استخلاص بعض الاستنتاجات التي تفكر في الطبيعة العامة لـ ProcessWire والوحدات الخاصة به ، وكيف يمكن مقارنته بملحقات أنظمة إدارة المحتوى الأخرى:

  • ProcessWire ليست تقريبا شعبية وانتشارا مثل WordPress ، Joomla ، Drupal ، وغيرها.
  • عادةً ما تكون وحدات ProcessWire ذات جودة عالية جدًا في الشفرة.  يفعلون شيئا واحدا ويفعلون ذلك الشيء بشكل جيد.
  • إن نظام ProcessWire في حد ذاته قوي ومرن لدرجة أنه ليس من الضروري ببساطة إضافة الكثير من الوحدات الإضافية لتمديدها.  على سبيل المثال ، لا تحتاج إلى وحدات نمطية لإنشاء عروض شرائح معرض ، أو وحدات من أجل الحصول على الطفل الأول لشيء ما ، أو وحدات لإنشاء صور مصغرة ، إلخ. كل ذلك (وأكثر من ذلك بكثير) مغطى بالفعل بالوظائف الأساسية لـ ProcessWire.

السنانير

بينما تعتبر الخطافات موضوعًا متقدمًا إلى حد ما ، إلا أنها جديرة بالملاحظة وتوضح أن وظيفة ProcessWire تهدف إلى تغييرها وتوسيعها بسهولة فائقة. يحتوي ProcessWire على المئات من الطرق التي يمكنك ربط بها ، من أجل تعديل سلوك طريقة ما.

لنفترض أننا أنشأنا نموذج اتصال بسيط باستخدام واجهة برمجة التطبيقات أو أداة إنشاءالنماذج ، وتم وضع علامة على بعض الحقول كما هو مطلوب في النهاية الخلفية. ما نريد تحقيقه هو أيضًا إضافة ترميز الواجهة الأمامية HTML5 المناسب لحقول النموذج المطلوبة. ProcessWire يجعل هذا سهل جدا.  نحن نعلق ببساطة في طريقة تقديم حقول الإدخال ونحدد ما نريد تخصيصه: اسأل ما إذا كان الحقل مطلوبًا ، وأضف السمة الأمامية المطلوبة ، ووضع علامة النجمة في نهاية تسمية الإدخال.

1
$forms->addHookBefore("Inputfield::render", function ($event) {
2
    $field = $event->object;
3
    
4
    if ($field->required) {
5
        $field->attr("required", "required");
6
        $field->label .= "*";
7
    }
8
});

4. أنها لا تحصل في طريقك ويوفر أدوات لإنشاء واجهات مصممة خصيصا ، سهل الاستعمال

أحد الأشياء الرئيسية التي يحبها الناس حول ProcessWire: لا تحصل على طريقك. إنها تتصرف بالطريقة التي تريدها وتتكيف مع أسلوبك في تطوير موقع الويب.

على سبيل المثال ، لديك التحكم الكامل في إخراج الترميز ولا يتم فرض طريقة معينة لتطوير قالب على نظام الملفات.  إذا كنت معتادًا على أسلوب وورد بريس لتطوير الأشياء ، فيمكنك الاستمرار كما كنت معتادًا.  أو إذا كنت ترغب في إنشاء بنية أكثر تعقيدًا ، يمكنك استخدام نهج مستوحى من MVC ، وستعمل أيضًا بشكل جيد.

كما ذكرت سابقًا ، لا تحتوي الصفحات على مجموعة من الحقول الإلزامية حتى يفهم ProcessWire بنية الصفحة. (على الأقل غير مرئية. هناك بعض الحقول المضمّنة مثل المراجع إلى أصل الصفحة أو عدد أطفال الصفحة ، إلخ.)  يمكنك وضع 100 حقل على الصفحة إذا أردت ذلك ، وقم بطلبها بأي طريقة تريدها ، وحدد المطلوب منها وأيها غير ، ويمكنك وضعها في مجموعات حقول أو علامات تبويب مختلفة للحصول على تجربة أفضل في واجهة المستخدم.

الشيء الرئيسي الآخر الذي يعجب الناس حول ProcessWire: يوفر بشكل طبيعي أدوات لإنشاء واجهات مصممة خصيصًا وسهلة الاستخدام.  أعطيتك لمحة عن ذلك في الفقرة السابقة.  مستوى التخصيص للقوالب هو تهب العقل.  بمجرد تجربة ذلك بنفسك ، ستفهم لماذا ProcessWire أكثر من CMF من CMS.

على سبيل المثال: يحتوي كل حقل على سياق خاص بقالب خاص به.  وهذا يعني أنه يمكنك تحديد أن يكون للحقل نفس المجال تسمية ووصفاً وسلوك معين في قالب واحد ، وتوصيف مختلف تمامًا ووصفًا وسلوكًا في قالب آخر.

مثال آخر هو تبعيات حقل الإدخال : تمكّنك من تحديد الشروط التي يتم بموجبها عرض حقل معين في محرر الصفحات أو مطلوب.

ومثال آخر هو الوحدة النمطية PageTableExtended : فهو يتيح للمستخدم عرض وتحرير وتعديل أجزاء مختلفة من صفحة موقع الويب الخاصة بك (والتي تقوم بتعريفها كمطور) بطريقة مرئية وبديهية.

هذا بالنسبة لي هو تعريف أنيق وتمكين عميق.

استنتاج

يمكن لهذه المقالة أن تخدش سطح ما يمكنك فعله باستخدام ProcessWire وما تقدمه.  ببساطة ، قائمة الميزات الرائعة ، طويلة جداً وستتجاوز نطاق هذه المقالة. دعوني أعطيكم لمحة عن بعض هذه:

كلما استخدمت ProcessWire وأكثر كلما استوعبت المفاهيم الأساسية ، واجهة برمجة التطبيقات وبنيتها النمطية ، كلما استفدت أكثر من استخدامها.  سوف تدرك كيف أن أدوات سير العمل وموارد سير العمل في PowerWire قوية للغاية.  يمكن للمرء أن يقول أن الشيء الوحيد الذي يقيدك في تحقيق هدف معين مع ProcessWire هو خيالك الخاص.

اسمحوا لي أن أختم كلمتي نقلا عن خالق ProcessWire ريان كريمر:

ProcessWire هو نظام يكافئك من خلال الفضول.  نهدف إلى إظهار كيفية صيد الأسماك حتى تتمكن من اصطياد الأسماك الكبيرة.

أين أذهب من هنا

روابط وأدوات مفيدة حول ProcessWire:

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Web Design tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.