اذهب إلى المحتوى

السؤال

نشر

السلام عليكم 
أنا مبتدأ في البرمجة و قمت ببرمجة بلوج على laravel بس لم تتضح لي طريقة عمل shortecodes تكون شبيهة بالتي تعمل على الوورد بريس و يكون عليها متغيررات

تحياتي .

Recommended Posts

  • 0
نشر
بتاريخ 12 دقائق مضت قال محمد أبو عواد:

مرحبا
هل تقصد function يمكن استخدمها في أي مكان من التطبيق؟

نعم بس الدي أبحث عليه شيئ يكون مشابه للدي يعمل على ووردبريس 

  • 0
نشر
بتاريخ الآن قال Anouar Xrud:

نعم بس الدي أبحث عليه شيئ يكون مشابه للدي يعمل على ووردبريس 

ليس لدي خبرة بالوورد برس كثيرا ولكن من الممكن انشاء ملف في المجلد app ليكن اسمه مثلا helper.php وتستطيع بداخله كتابة أي function ومن ثم استخدام هذه ال function في كل مكان من التطبيق, بالطبع يمكنك تمرير بعض المعاملات لهذه ال function
الآن لجعل الملف معرف بداخل التطبيق بشكل كامل يجب القيام ببعض الخطوات
بعد انشاء الملف نذهب الى ملف composer.json ثم نقوم باضافة هذا الملف ضمن الكائن autoload
لاحظ كيف شكل الكائن autoload قبل اضافة الملف

    "autoload": {
        "psr-4": {
            "App\\": "app/"
        },
        "classmap": [
            "database/seeds",
            "database/factories"
        ]
    },

أما بعد اضافة الملف يصبح شكل الكود كالتالي

    "autoload": {
        "psr-4": {
            "App\\": "app/"
        },
        "classmap": [
            "database/seeds",
            "database/factories"
        ],
		"files":["App/helper.php"]
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    },

لاحظ لقد قمنا باضافة الخاصية files وكما نلاحظ أيضا نستخدم علامات التنصيص الثنائية " " ثم نقوم بكتابة مسار الملف helper.php الذي أنشأناه في المجلد app, بعد ذلك يجب أن نقوم بتنفيذ الأمر التالي من خلال مشغل الأوامر

composer dump-autoload


بعد ذلك يمكنك كتابة أي function بداخل الملف واستدعائها بشكل مباشر في المتحكمات وصفحات blade 
شكرا لك

  • 0
نشر
بتاريخ 4 دقائق مضت قال محمد أبو عواد:

ليس لدي خبرة بالوورد برس كثيرا ولكن من الممكن انشاء ملف في المجلد app ليكن اسمه مثلا helper.php وتستطيع بداخله كتابة أي function ومن ثم استخدام هذه ال function في كل مكان من التطبيق, بالطبع يمكنك تمرير بعض المعاملات لهذه ال function
الآن لجعل الملف معرف بداخل التطبيق بشكل كامل يجب القيام ببعض الخطوات
بعد انشاء الملف نذهب الى ملف composer.json ثم نقوم باضافة هذا الملف ضمن الكائن autoload
لاحظ كيف شكل الكائن autoload قبل اضافة الملف


    "autoload": {
        "psr-4": {
            "App\\": "app/"
        },
        "classmap": [
            "database/seeds",
            "database/factories"
        ]
    },

أما بعد اضافة الملف يصبح شكل الكود كالتالي


    "autoload": {
        "psr-4": {
            "App\\": "app/"
        },
        "classmap": [
            "database/seeds",
            "database/factories"
        ],
		"files":["App/helper.php"]
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    },

لاحظ لقد قمنا باضافة الخاصية files وكما نلاحظ أيضا نستخدم علامات التنصيص الثنائية " " ثم نقوم بكتابة مسار الملف helper.php الذي أنشأناه في المجلد app, بعد ذلك يجب أن نقوم بتنفيذ الأمر التالي من خلال مشغل الأوامر


composer dump-autoload


بعد ذلك يمكنك كتابة أي function بداخل الملف واستدعائها بشكل مباشر في المتحكمات وصفحات blade 
شكرا لك

تمام صديقي شكرا لك 

  • 0
نشر

مرونة لارافل , و البرمجة الخاصة بشكل أعم , تجعل طرق تحقيق نفس غرض الـ shortcodes مثل ما في الوردبرس كثيرة و شاسعة , و لعل من أبسط الطرق : 

  1. عن طريق تخصيص توابع الـ blade أو كما تسمى الـ blade directives ( في حالة الإستعمال في ملفات blade فقط ):

نقوم بتعريف التوابع بملف BladeServiceProvider.php بداخل مجلد App/Providers بداخل الدالة boot على هذا النحو :

(قد تحتاج لإنشاء Provider بنفس الإسم إن لم يكن الملف موجودا .

يمكنك ذلك عن طريق الأمر : php artisan make:provider BladeServiceProvider ) . 

<?php 
namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class BladeServiceProvider extends ServiceProvider {

	/**
	 * Bootstrap any application services.
	 *
	 * @return string
	 */
	public function boot()
	{
        // video 
        Blade::directive('video', function ($expression) {
           return '<video width="320" height="240" controls>
                     <source src="'.$expression.'" type="video/mp4">
                  </video>';
        });
        
        // audio
        Blade::directive('audio', function ($expression) {
           return '<audio controls>
                     <source src="'.$expression.'" type="audio/ogg">
                  </audio>';
        });
	}

	/**
	 * Register any application services.
	 *
	 * @return void
	 */
	public function register()
	{
		//
	}

}

ثم يمكن إستعمال أي لاحقة أو أي shortcode بملفات الـ blade عن طريق : 

@video('path/to/video.mp4')

@audio('path/to/audio.mp3')

     2.  عن طريق تعريف واجهة تحمل الدوال المسؤولة عن اختصار الكود :

نقوم بإنشاء مجلد واجهات Facades بداخل مجلد App و ننشئ به ملف Shortcodes.php ليحمل المحتوى التالي : 

<?php 

namespace App\Facades;

class Shortcodes 
{
  /** 
  * create video from a given source.
  *
  * @return string
  */
  public static function video($source)
  {
       return '<video width="320" height="240" controls>
                     <source src="'.$source.'" type="video/mp4">
                  </video>';
  }
  
  /**
  * create audio from a given source.
  *
  * @return string
  */
  public static function audio($source)
  {
    return '<audio controls>
                     <source src="'.$source.'" type="audio/ogg">
                  </audio>';
  }

}

ثم يمكن إستدعاءه من أي مكان في التطبيق عن طريق : 

<?php 

echo App\Facades\Shortcodes::video('path/to/video.mp4');

echo App\Facades\Shortcodes::audio('path/to/audio.mp3');

كما يمكنك تعريف مكافئ بملف app.php لإستدعاء أنظف : 

<?php 

'aliases' => [
        ........
        'Shortcode'=> App\Facades\Shortcodes:class, 
]

ثم يتم الإستدعاء هكذا : 

<?php 

echo \Shortcode::video('path/to/video.mp4');

echo \Shortcode::audio('path/to/audio.mp3');

      3. إن كانت حاجتك للـ shortcodes حاجة لتلخيص أكواد الـ html فقط فيمكن تعريفها كملفات blade و تضمينها كمكونات . 

على سبيل المثال : 

نقوم بإنشاء مجلد components بداخل مجلد views .

نقوم بإنشاء ملف video.blade.php و يكون محتواه كالتالي :  

<video width="320" height="240" controls>
     <source src="{{ $source }}" type="video/mp4">
</video>

ثم نقوم بإستدعاءه من ملفات الـ blade الأخرى عن طريق تضمينه وتمرير المتغير source معه :

@include('components/video' ,['source' => 'path/to/video.mp4']) 

أو يمكن أيضا تعريفها عن طريق مساعد helper بشكل globally و إستعماله بأي مكان من أجزاء التطبيق مثل ما اقترح المدرب@محمد أبو عواد.

فكل الطرق تحقق نفس الغرض و تقوم بمثل عمل الـ shortcodes بالوردبرس .

و بنفس الطريقة يمكنك أيضا معاملة الـ shortcodes الأخرى الخاصة بالوردبرس من مثل embed , gallery , playlist و caption بنفس المنطق و إنشاء دوال مكافئة تختصر عملها و يسهل إستدعاءها من أي مكان من التطبيق , و لعلها فكرة جميلة تجعل الكود أنظف و أسهل من ناحية التحكم . 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...