کدهای کوتاه وردپرس در لاراول

وردپرس بخاطر ابزار هایی که داره برای خیلی از کاربرا و همینطور توسعه دهنده ها جذابه و خیلی از کاربر هایی که از وردپرس و ابزارهاش استفاده کردند در یک سیستم اختصاصی هم طبیعتا به دنبال چنین ابزار هایی هستند؛ از قدیم هم گفتند ترک عادت موجب مرض است فلذا بیاید بهشون همون جنسی رو بدیم که میخوان.

یکی از این ابزار های پرکاربرد که خیلی از افزونه ها به طور مثال افزونه های صفحه ساز و فرم ساز و ... برای تعامل هرچه بهتر کاربر با محتوا های داینامیک استفاده میکنند "شرت کد" یا "shortcode" نامیده میشه؛ با استفاده از شرت کد ها شما میتونید با یک تکه متن ساختارمند سفارشی یک محتوای داینامیک مثل لیست کاربران امروز یا یک فرم یا یک نوع خاصی از نمایش محتوای رسانه ای یا هر چیز دیگری رو درون محتوای خام مورد نظر لود کنید بدون اینکه کاربر درگیر کد نوشتن و یا این قبیل از کارهای کارگری بشه.

چیزی که خواهیم ساخت - نمونه

تو این نمونه ای که خواهیم ساخت 2 شرت کد رو میسازیم یکی به اسم GoodImage خواهد بود که افکت جالبی رو برای تصاویر ایجاد میکنه و دیگری GoodText خواهد بود که یه افکت خاصی روی نوشته ما اعمال خواهد کرد با فراگیری همین 2 نمونه میتونید بی نهایت شرت کد با کارکرد های مختلف یادبگیرید و شروع به فکر کردن باهاش کنید.

1 - نحوه استفاده از شرت کد توسط کاربر در ادیتور
1 - نحوه استفاده از شرت کد توسط کاربر در ادیتور


2 - نتیجه کار
2 - نتیجه کار


ریجکس / Regex

تجزیه طلبی و جدایی خواهی بدون استفاده از ریجکس توسط هر زبان و توسعه دهنده ای بدون شک سرکوب خواهد شد! ما برای جدا سازی و تجزیه متون در اینجا شرت کد ها به ریجکس نیاز اساسی خواهیم داشت و میشه گفت اساسی ترین بخش مان هم همین پترن نویسی درسته! اگر با ریجکس آشنایی ندارید یا ازش درک خوبی ندارید نگران نباشید تو این مورد بخصوص پترن مورد نیازش در اختیارتون قرار میگیره اما فراگیری و درک کردن ریجکس میتونه شما رو از یک توسعه دهنده صرف به یک توسعه دهنده ASS KICKER تبدیل کنه؛ فلذا بعد از این مقاله برید سراغش! یا صبر جمیل کنید خودم دربارش بنویسم %)

شروع به کار

ما 4 کلاس خواهیم داشت

  • کلاس Shortcode : که یه اینترفیس ساده است برای مشخص کردن متد ها و متغیر های ضروری یک کلاس شرت کد
  • کلاس ShortcodeManager: که وظیفه ریجیستر و پارز کردن و جایگذاری رو بر عهده خواهد داشت
  • کلاس GoodImage : که کنترلر و ویو شرت کد good_image رو به عهده خواهد داشت
  • کلاس GoodText : که کنترلر و ویو شرت کد good_text رو به عهده خواهد داشت
ساختار پوشه بندی
ساختار پوشه بندی

همانطور که مشاهده میکنید یک پوشه Shortcode داریم و یک پوشه List درون پوشه Shortcode؛ پوشه List کنترلر شرت کد های ما را در خودش خواهد داشت.

ما 1 پوشه جهت نگه داشتن ویو شرت کد ها خواهیم داشت

پوشه shortcode و 2 فایل ویو شرت کد ها
پوشه shortcode و 2 فایل ویو شرت کد ها


آن 4 کلاس میتونن به صورت کنترلر لاراول؟! یا به صورت چیزی که اینجا ایجاد کردیم, ایجاد بشن در اینجا من به صورت ساختاریافته جدا از کنترلر های لاراول ایجادشون کردم و توصیه میکنم جدا از کنترلر لاراول بسازیدشون (کنترلر ها رو بزارید برای route ها بمونن ;) )

کلاس Shortcode

یه اینترفیس ساده برای مشخص کردن متد ها و فیلد های ضروری کلاس شرت کد ها

فایل Shortcode.php
فایل Shortcode.php

خط نخست درون کلاس، چون بخاطر شیرین کاری پی اچ پی نمیتونیم تو اینترفیس فیلد تعریف کنیم! بجاش یه گتر تعریف کردیم تا زمان ایجاد شرت کد ها مجبور بشیم ایمپلمنتش کنیم.

خط دوم درون کلاس، متدی هستش که هر شرت کدی باید داشته باشه و وظیفه گرفتن اطلاعات شرت کد و سپس رندر کردن شرت کد رو داره.

کلاس ShortcodeManager

وظیفه ریجیستر و پارز کردن و جایگذاری رو بر عهده خواهد داشت

فایل ShortcodeManager.php
فایل ShortcodeManager.php

در این کلاس یک ارایه استاتیک به اسم shortcodes رو داریم که وظیفه نگه داری شرت کد های ریجیستر شده ما رو داره.

3 متد داریم که به ترتیب: متد parse که وظیفه گرفتن محتوای متنی که توش کد شرت کد قرار گرفته رو میگیره سپس توسط پترنی که برای ریجکس نوشته شده اون رو تجزیه میکنه و گروه بندی میکنه سپس آرایه فرستاده شده توسط تابع preg_match_all رو میگیریم تا بتونیم به لیست شرت کد های استخراج شده دسترسی داشته باشیم.

این کد شرتکد GoodImage ماست که در محتوا مثلا در ادیتور توسط کاربر یا توسط ویرایشگر متن وارد شده:

[good_image url=&quothttps://wallpaperaccess.com/full/893945.jpg,https://wallpapercave.com/wp/wp3851968.jpg&quot name=&quotYup, I DID IT&quot]

در اینجا good_image همان نام کد شرتکد ماست که در ریجکس در گروه name قرار گرفته

اتریبیوت های ما که همان پارامتر های شرتکد ها هستند هم به صورت key="value" درج شدند.

برای پارز کردن این اتریبیوت ها که اتریبویت هایی به مانند اتریبیوت های html هستند از کلاس SimpleXMLElement استفاده کردیم و اتریبیوت استخراج شده در تابع preg_match_all رو به همان صورتی که استخراج شده رو با یک المنت فرضی به constructor کلاس SimpleXMLElement پاس میدیم.

سپس اتریبویت های پارز شده توسط SimpleXMLElement را گرفته آن را تبدیل به آرایه کرده

شرت کد مان را فراخوانی کرده و این آرایه بدست امده را به متد render پاس داد و سپس محتوای رندر شده شرت کد را با کد شرتکد درون محتوای اصلی جایگذاری میکنیم.

کلاس GoodImage

فایل GoodImage.php
فایل GoodImage.php

2 متد که از کلاس Shortcode ایمپلمنت شده متد getCode که برای یافتن شرت کد در ShortcodeManager استفاده میشود و متد render که اتریبیوت های شرتکد را گرفته آن ها به دلخواه تغییر / پارز کرده و سپس رندر کرده و آن را برمیگرداند.

کلاس GoodText

فایل GoodText.php
فایل GoodText.php

در اینجا هم مشاهد میکنیم مانند کلاس GoodImage دو متد اصلی داریم با مکانیزم یکسان.

راهندازی و ریجستر شرت کد ها

برای راهندازی و ریجستر کردن شرت کد ها باید هنگام بوت / ریجیستر اپلیکیشن اونا رو ادد کنیم به شرت کات منیجر. برای این کار به این صورت عمل میکنیم:

AppServiceProvider.php
AppServiceProvider.php

فایل app\Providers\AppServiceProvider.php رو باز کرده و شرت کد هایی که میخوایم ریجستر بشن رو به این شکلی که در تصویر مشاهده میکنید ادد میکنیم.

راهنمای استفاده

فایل web.php
فایل web.php

همانطور که در فایل بالا مشاهده میکنید یک متن که حاوی کد شرت کدها هست رو به متد parse کلاس ShortcodeManager پاس داده و محتوای جایگذاری شده رو گرفته و به ویو اصلی خودمون تحویل دادیم.

کد های پروژه

جهت دسترسی به کد های مربوطه میتونید از این صفحه دسترسی داشته باشید

https://gitlab.com/sadeghisalar/wp-shortcode-for-laravel

امیدوارم به کارتون بیاد و چیزای باحالی باهاش بسازید ?