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

Adnane Kadri

الأعضاء
  • المساهمات

    5196
  • تاريخ الانضمام

  • تاريخ آخر زيارة

  • عدد الأيام التي تصدر بها

    52

كل منشورات العضو Adnane Kadri

  1. يتم ذلك بوساطة بوابات الدفع التي توفر واجهات برمجية أو مكتبات للتعامل مع كامل مراحل عمليات الدفع وتتبعها. وتختلف طريقة استعمال كل واحدة من هاته البوابات عن الأخرى، والتي تعمل وفق المنطق التالي: يقدم العميل او رزائر موقعك طلبا للدفع بتقديم معلومات الدفع الخاصة به. تأخذ بوابة الدفع هاته المعلومات وتشفرها وترسلها عبر قناة آمنة الى معالج الدفع. يأخذ معالج الدفع العميل عبر خطوات إنهاء الدفع. يتحقق معالج الدفع من نجاح الدفع ويعيد العميل الى الموقع الخاص بك. عموما، يتم اختيار بوابة دفع بحسب: الأمان والشهادات الالكترونية وموثوقية البوابة. رسوم الخدمات التي تقدمها البوابة. القبول الدولي (أي ان دولة العميل او عملائك المستهدفين يجب ان تكون ضمن الدول المدعومة من هاته البوابة). دعم العملاء. وفيما يلي بعض من اشهر بوابات الدفع: بوابة stripe بوابة بيبال بوابة 2checkout
  2. قد تكون هاته من بين المشاكل المتكررة في ويب باك، يكون هذا عادة بتعارض يحدث ما بين الحزمتين html-loader و file-loader. نتأكد في حل المشكلة من استعمال نسخة أقدم من حزمة html-loader، يكون ذلك عن طريق تشغيل الأمر: npm i html-loader@1.3.2 أو باستبدال السطر الخاص بالحزمة في ملف package.json بـ: "html-loader":"^1.3.2" ثم اعادة تثبيت اعتماديات Node عن طريق تشغيل الأمر: npm run i ثم سيمكنك اعادة تشغيل خادم ويب باك او اخراج مجلد dist بشكل عادي. في حالة استمرار المشكلة يرجى ارفاق ملف package.json وملف اعداد webpack.config.js للنظر في المشكلة على نحو أدق.
  3. بجانب ما اقترحه المدرب وائل، يمكنك انشاء عنصرا مخصصا يحمل سمة توضيحية تخص عنصرا ما، فيما يلي الهيكلة العامة للعنصرين: <div class="tooltip"> العنصر الرئيسي <span class="title">عنصر السمة التوضيحية</span> </div> تنسيق العنصرين: /* العنصر */ .tooltip { position: relative; } /* عنصر السمة التوضيحية */ .tooltip .title { /* اخفاء العنصر بشكل افتراضي */ display:none; /* يجب تمليك العنصر الوضعية المطلقة */ position: absolute; } /* اظهار العنصر عند تمرير مؤشر الفأرة */ .tooltip:hover .title { display:initial; } لاحظ أن عنصر السمة هنا يقبل اي عناصر HTML وسيمكن عليه تطبيق أي تنسيقات CSS.
  4. حسب مدونة خمسات، فإنه توجد مجموعة من المعايير التي تتحكم في تصدر خدماتك أو خدمتك نتائج البحث، نذكر من بينها: التقييمات على الموقع معدّل سرعة استجابة البائع في الموقع تواجد البائع أثناء البحث في الموقع معدّل تسليم الطلبات استخدام الخدمات المطورة أغلب هاته الأمور، قد لا تكون متوفرة أو صعبة التحقيق بالنسبة للباعة الجدد، ولذلك فإنه سيكون عليك بذل بعض الجهد الاضافي للحصول على أول العملاء. ينصح مثلا بالمشاركة في طلبات الخدمات الغير موجودة أو متابعتها بشكل دائم ومحاولة إنشاء خدمة مميزة وفريدة ومطلوبة في نفس الوقت.
  5. أظنك تحتاج تفيكيك السؤال "هل أنا جاهز للعمل الحر" إلى أسئلة أدق من مثل "هل بإستطاعتي العمل على المشاريع المعروضة" و "هل المهارات المطلوبة أمتلكها بالفعل". فأنت ستحتاج مجالا تقوم بالبحث فيه والاطلاع على طبيعة المشاريع ووصفها وأمثلة عنها والمهارات المطلوبة فيها. وعليه سيمكنك تقدير نفسك ضمن هاته المشاريع. وبشكل عام، نعم سيمكنك الانطلاق في مشاريع العمل الحر الخاصة بتطوير واجهات المستخدم بعد إنهاء هاته الدورة. بالنسبة لسؤالك الثاني حول خدمات خمسات، فبشكل عام ستحتاج: أن يكون العنوان واضحاً باللغة العربية، يجب أن يصف الخدمة التي تريد أن تقدمها. تشترط خمسات أن لا تدخل رموزاً أو كلمات مثل "حصرياً"، "لأول مرة"، "لفترة محدود".. الخ. أن يكون وصف الخدمة بدقة يتضمن جميع المعلومات والشروط. وتمنع خمسات وضع البريد الالكتروني، رقم الهاتف أو أي معلومات اتصال أخرى. أن يمتلك كلمات مفتاحية متعلقة بالخدمة مثال: تطوير مواقع, ووردبريس, تصميم هذا وتعتبر كل خدمة حالة خاصة لها وصفها الخاص وعنوانها الخاص الذي يميزها دون باقي الخدمات. يمكنك الاستزادة بالاطلاع على هاته المقالة 10 نصائح لزيادة فرص بيع خدماتك على خمسات
  6. يمكنك استخدام الوظيفة var_export لتصدير تمثيل المتغير الممرر عبرها كسلسلة نصية: <?php $done = true; echo var_export($done ); // true $done = false; echo var_export($done ); // false الدالة var_export()‎ في PHP حسب ويكي حسوب.
  7. هذا ليس خطأ، فهو إشعار. ويتم اخراج هذا الإشعار لأن الوظيفة end () تتوقع مرجعًا reference لشيء تريد تغييره والذي يتوقع ان يكون متغيرا، في حين انك تقوم بإسناد التعريف مباشرة. أي انه لن يمكنك تمرير نتيجة explode مباشرة اليها دون حفظها في متغير اولا واستدعاءها بمرجعية هذا المتغير. ففي المثال الذي لديك هي متواجدة في الذاكرة ولا يشير اليها أي متغير وبطبيعة الحال فإنه لن يمكنك انشاء اشارة اليها. ولذلك فإن الحل الأول هو انشاء مرجع، او بمعنى آخر تخزين الخرج في متغير وتمريره كمعامل للوظيفة end. كحل آخر، يمكنك تجاهل هذا الإشعار والتغاضي عما يخرجه مباشرة ويكون ذلك عن طريق استخدام عامل التجاهل: $file_name = @end(explode('/', $file_path));
  8. تعتبر الوظيفة empty طريقة للتحقق من ما ان كان متغير ما يحمل قيمة فارغة، القيم الفارغة المعتبرة هي: "" سلسلة نصية فارغة. 0 كعدد. 0.0 كعدد عشري. "0" كسلسلة نصية. Null كقيمة فاضية false كقيمة بوليانية [] كمصفوفة فارغة يقتضي هذا ان يكون المتغير معرفا بالفعل، ولكنه يحمل احد القيم المعتبرة فارغة. في حين ان الذي تقوم به الوظيفة isset هو التحقق من ما ان كان هذا المتغير معرفا أول الأمر أم لا، لاحظ المثالين: <?php $emptyVar = ''; $emptyVar2 = []; $notEmpty = 'Hsoub'; echo empty($emptyVar); // true echo empty($emptyVar2); // true echo empty($notEmpty); // false echo isset($unsetVar); // false وبالتالي، المثال الذي لديك يتحقق من ما ان كان المتغير معرفا، ولا يحمل قيمة فارغة. كطريقة اقصر يمكنك مباشرة استعمال الوظيفة empty وحدها، وذلك لأن هاته الأخيرة تقوم بإعادة قيمة بوليانية false في حالة عدم تعريف المتغير، فبدل: if ( isset($myArr[1]) AND !empty($myArr[1]) ) { // do something } يمكنك مباشرة استعمال: if ( !empty($myArr[1]) ) { // do something } الدالة empty()‎ في PHP الدالة isset()‎ في PHP
  9. بالمفهوم البسيط، يستعمل الموجه ‎@section لتعريف قسم أو جزء لإضافة المحتوى، بينما تعرض التعليمة ‎@yield وتعرف محتوى قسم معيّن. على سبيل المثال: نقوم بتحديد عنوان الصفحة في العنصر الابن عن طريق حقنه الى المعامل الثاني لـلموجه section @section('title', 'Page Title') نقوم بتحديد المكان الذي سيتم فيه حقن أي محتوى يسند الى التعليمة section : <head> <title>App Name - @yield('title')</title> </head> أي: تستعمل yield لتحديد موضع حقن العناصر والمحتويات في ملف العرض الأب. تستعمل section لتعريف قسم معين في ملف العرض الابن.
  10. يمكنك استخدام التعابير النمطية للتحقق من ان عبارة او سلسلة نصية ما هي ما يماثل الشكل العام لعناوين البريد الالكتروني، فيما يلي مثال عن التعبير النمطي الذي نريده: $pattern = "/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,})$/i"; مثال عملي : function isValidEmail($str) { $pattern = "/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,})$/i"; return preg_match($pattern ,$str); } echo isValidEmail('jhondoe@email.com'); // true echo isValidEmail('jhondoeemail.com'); // false يمكنك الاستزادة بالاطلاع على كيفية صياغة التعبيرات النمطية في PHP
  11. أحب تعريف بيانات المشرف وادراجها بقواعد البيانات في ملف تهجير جدول المشرفين بشكل مرافق، يكون هذا عمليا في الحالات التي نقوم بها بتنفيذ أمر التهجير php artisan migrate في الانتاج، وكذلك بعد تصدير قواعد البيانات على الخادم المحلي وتضمينها في قواعد البيانات خادم الاستضافة لديك. يمكنك تعريف التابع التالي بملف التهجير المرافق: /** * Run the migrations. * * @return void */ public function up() { Schema::create('admins', function (Blueprint $table) { $table->id(); $table->string('name'); $table->string('email')->unique(); $table->timestamp('email_verified_at')->nullable(); $table->string('password'); $table->rememberToken(); $table->timestamps(); }); $this->createDefaultAdmin(); } /** * Creates the deafult admin for app * * @return void */ private function createDefaultAdmin() { App\Models\Admin::create([ 'name' => 'admin admin', 'email' => 'admin@admin.co', 'password' => Illuminate\Support\Facades\Hash::make('@password'), ]); } وسيتم انشاءه كل مرة تقوم فيها بتهجير قواعد البيانات.
  12. لا أظن هنالك مشكلة بقواعد البيانات لديك، فخرج الخطأ تقومين بطباعته بشكل مخصص وذلك في الشطر الأول من الشرط if المقيد بالشرط : $file = file_put_contents($this->getNameWithPath() ,file_get_contents('php://input')); قد تُرجع هذه الوظيفة file_get_contents قيمة بوليانية false، ولكنها قد تُرجع أيضًا قيمة غير منطقية يتم تقييمها على خطأ. تستعمل هاته الوظيفة في مضمونها الدوال fopen و fclose وfwrite ولذلك فإن أي مشكل بهاته الوظيفة سيؤدي بالضرورة الى خطأ بعملها. تأكدي أولا من انك تمتلكين كامل صلاحيات الكتابة والفتح والاغلاق للمجلد المستهدف المراد حفظ الملف فيه، ثم سيمكنك اعادة تنفيذ السكربت. ان استمرت المشكلة، يرجى ارفاق الشيفرات بشكل مكتوب بدل التقاط صور لها، وذلك حتى يمكن اختبار الشيفرات عمليا. فيما يلي توثيق الدالة file_put_contents.
  13. أظنك قد تحتاج وصول SSH لتنفيذ مثل هكذا أمر. قد يمكنك تنفيذ أمر تشغيل السكربت المستهدف عن طريق الأمر: php scriptname.php يمكنك استعمال الوظيفة exec لهذا الأمر. كالتالي: exec('php scriptname.php') ان كنت قد تحتاج ايضا التعامل مع خرج هذا السكربت على نحو معين، يمكنك الاستفادة من هاته الاجابة لسؤال سابق لك:
  14. رغم أن الأمر يتشابه كثيرا الى ان التفاصيل تعتمد بالدرجة الأولى على الاستضافة التي ستقوم برفعها عليها. فعلى الاستضافات المشتركة مثلا لن تحتاج -في الغالب- تثبيت الحزم اللازمة على الاستضافة، وانما ستحتاج: تكوين مجلد vendor محليا ضمن ملفات مشروعك عن طريق الأمر composer install، ولا حاجة من هذا ان كنت تمتلك هذا المجلد بالفعل. ثم رفع ملف مشروعك مضغوطا الى المسار العام للاستضافة المشتركة التي لديك (يكون هذا عادة باسم public_html). فك الضغط واخراج الملفات داخل هذا المسار. اخراج ملف index.php من مجلد public الى داخل هذا المسار (أي الى داخل public_html). بعد اخراج ملف index.php ستحتاج القيام ببعض التعديلات الموافقة لهذا النقل، ويكون ذلك بتعديل السطرين: require __DIR__.'/../vendor/autoload.php'; $app = require_once __DIR__.'/../bootstrap/app.php'; الى: require __DIR__.'/vendor/autoload.php'; $app = require_once __DIR__.'/bootstrap/app.php'; ستحتاج ايضا بشكل منفصل انشاء قواعد البيانات عن طريق تصديرها من مدير قواعد البيانات لديك على الخادم المحلي، وبالطبع انشاء مستخدم بكلمة سر. وأخيرا ربط هاته البيانات بالتطبيق عن طريق التعديل على ملف البيئة env. كشيء جانبي آخر، قد تضطر الى تكوين الروابط الرمزية symlinks ان كنت تستعملها على الخادم المحلي. يمكنك لذلك عن طريق انشاء مسار مخصص لتنفيذ هذا الأمر كـ : Route::get('storage/symbolic_link', function(){ Artisan::call('storage:link'); }) ثم زيارة المسار المستهدف لتنفيذ هذا الأمر. (لا تنسى تضمين الواجهة Artisan).
  15. ينبغي أولا فهم ما الذي تقوم به الدوال المولدة generators قبل التطرق لـ yield نفسها، فالأولى تقتضي استعمال الأخيرة. تعد المولدات في PHP تقدم طريقة أسرع وأسهل لإستخدام المكررات Iterators، فبدل السياق التالي لإضافة 100 الى كل عنصر من مصفوفة عددية: function myFunct($items) { $result = []; foreach ($items as $item) { $result[] = $item + 100; } return $result; } يتم كتابة صيغة المولد كـ: function myFunct($items) { foreach ($items as $item) { yield $item + 100; } } ففي الأولى: يتم انشاء مصفوفة جديدة. نقوم تباعا باستعمال تكرارة foreach بالإضافة الى المصفوفة الجديدة كل عنصر من عناصر المصفوفة القديمة مضافا اليه 100. وفي الأخير نقوم بإعادة المصفوفة الجديدة كخرج. أما في الثانية: فنحن نقوم مباشرة بإضافة الـ 100 الى كل عنصر من عناصر المصفوفة القديمة. وكل هذا يكون دون الحاجة حتى الى اعادة خرج أو اعادة تعيين مصفوفة جديدة لإعادتها كخرج لاحقا. و yield هنا هي أساس عمل هاته الدالة المولدة، فهي تعمل بشكل مشابه لـ return سوى أن هاته الأخيرة توقف تنفيذ الشيفرة. و yield تواصل تنفيذها الى القيمة التي ما بعدها. بمعنى: لو استقبلت الدالة المولدة المصفوفة [1,2] فهي لن تعيد 1 وتوقف تنفيذ الشيفرة عند اول تكرارة، بل ستقوم بإعادة تعيين 1 بالقيمة المسندة الى yield وتواصل العملية الى 2 وهكذا. بجانب فرق السرعة والضغط على الخادم الذي يكون في صالح المولدات لما يكون الأمر متعلق بالمكررات، يختلف العائد في كل من الأولى والثانية قليلا. فعند استدعاء الدالة المولِّدة للمرة الأولى تعيد الدالة كائنًا من الصنف Generator.ولو قمت بتفحص عائد الدالة المولدة سترى ذلك: function myFunct($items) { foreach ($items as $item) { yield $item + 100; } } print_r(myFunct([0 ,1 , 2])); الخرج: Generator Object ( ) في حين ان خرج الدالة العادية الأولى سيكون عاديا: [100 ,101 , 102] هذا الكائن المعاد يطبق واجهة المكرر Iterator يمكن الوصول الى قيمها التي تعرف كخصائص كالتالي: function myFunc($items) { foreach ($items as $item) { yield $item + 100; } } foreach(myFunc([1,2,3]) as $i){ echo $i.'/'; } // => 101/102/103/ قد تحتاج الاستزادة بالتعرف على المولدات في PHP و PHP Object Iteration.
  16. بجانب ما اقترحه المدرب حسن يمكنك الاستعانة بالوظيفة json_decode لتحويل هاته السلسلة النصية (بمعاملتها كمصفوفة JSON) الى مصفوفة اعداد كالتالي: <?php $ages = "15,12,24"; $integerIDs = json_decode('[' . $ages . ']', true); print_r($integerIDs); الخرج: Array ( [0] => 15 [1] => 12 [2] => 24 ) توثيق الدالة json_decode()‎ في PHP.
  17. صحيح، المشكلة بسبب عدم امتلاك صلاحية الوصول او فتح الملف المشار اليه، ولذلك فإنك ستحتاج بجانب تغيير مجموعة الصلاحيات على المجلد تغيير مالك المجلد الى مستخدم خادم الويب لديك. عادة ما يكون هذا الأخير هو www-data يكون ذلك عن طريق الأمر : chown -R vagrant:www-data storage قد تحتاج أيضا تغيير صلاحيات مجلد bootstrap/cache : chmod -R 755 bootstrap/cache
  18. بجانب ما اقترحه المدرب محمد، يمكنك استعمال الوظيفة hrtime لتعيين وقتي قبل وبعد تنفيذ عملية ما، يعطى الفرق بالنانو ثانية (9-^10 ثانية) كالتالي: <?php // تخزين الوقت الابتدائي $start = hrtime(true); function example() { sleep(5); } example(); // تخزين الوقت النهائي $end = hrtime(true); // حساب الفرق $diff = $end - $start; // تحويل الفرق من النانو ثانية الى الثانية $diff = $diff / 1000000000; // طباعة الفرق echo "$diff seconds"; يمكن استعماله لمقارنة سرعة تنفيذ خوارزميات معينة.
  19. يمكنك الاستعانة بالوظيفة substr_replace لإستبدال سلسلة نصية معينة ضمن سلسلة أخرى نحددها لها، سنحتاج في هذا التلاعب ببعض الوظائف الأخرى. فيما يلي بعض الخطوات الوصفية: تخزين السلسة النصية الأصلية في متغير. تخزين السلسلة النصية الفرعية في متغير. تخزين الموضع الابتدائي للسلسلة النصية الفرعية. حساب طول السلسلة النصية الفرعية. يعطينا هذا فكرة عن احداثي هاته السلسلة في السلسلة الأم. مثال: تقع World ما بين الموضعين 7 و (موضعها الابتدائي + طولها). نسمي الموضع الأول أ والثاني ب. استبدال ما بين الموضعين أ و ب بالسلسلة النصية المرادة. مثال عملي: <?php // تعريف سلسلة نصية $str = "Hello, World!"; // تعريف السلسلة النصية الفرعية $word = "World"; // تخزين الموضع الابتدائي السلسة النصية الفرعية $pos = strpos($str, $word); // pos + length و pos استبدال ما بين الموضعين $newstr = substr_replace($str, 'My', $pos , strlen($word)); // طباعة النتيجة echo $newstr; // Hello, My! الدالة strpos()‎ في PHP الدالة substr_replace()‎ في PHP
  20. لن يأتي هذا وليد الصدفة فأنت ستحتاج الى الكثير من الاطلاع والتصفح بنظرة المصمم لكي يتكون لديك هذا الحس، هذا ما يسمى بالتغذية البصرية، فهو مجال ابداعي تتصرف فيه حرية المصمم ونظرته الفنية. هذا ويحاول المصممون دوما وصف بعض الخطوات التي تساعد في انشاء تصميم ويب عصري، نذكر من بينها: ابحث عن الإلهام، قم بتصفح المواقع والتطبيقات المشابهة لتطبيق تحاول العمل عليه، لا يعني هذا نسخها بالطبع، فأنت هنا ستحتاج تصفحها والتفاعل مع مكوناتها وأجزائها واستخلاص المهم منها. أحب تصفح موقع pinterest للحصول على أفكار للتخطيط والهيكلة بشكل عام و codepen للمكونات والأجزاء. تعلم كيف تختار الألوان بحذر، توجد فكرة في تجربة المستخدم تقول أن تراكيب الألوان في تصاميم الويب ترسل رسائل تعكس وتتحكم في مزاج المتصفح لموقعك، ولذلك فانك لن تضعها اعتباطا وفقط. قد تحتاج قراءة سيكولوجية الألوان في عالمي التسويق والعلامات التجارية و الألوان في تصميم الرسوميات ونظرية الألوان لمساعدتك على انتقاء حزمة الألوان المناسبة. تعرف على أساليب الطباعة Typography وكيفي تتعامل معها. تعامل بحذر مع المساحات البيضاء white spaces في تصميمك وتجنب ما يعرف بالمساحة السلبية Negative space، وهي بشكل بسيط الفراغات غير المتساوية بين المكونات والحاويات من نفس الجنس، فإذا كانت المساحة بين البطاقة 1 والبطاقة 2 هي 2 بكسل فلا يجب ان تكون المساحة بين البطاقة 3 والبطاقة 4 من نفس جنس 1 و 2 شيئا لا يساوي 2 بكسل بالضبط. ان كنت تبني تطبيقك مباشرة على الـ HTML و الـ CSS فقد تحتاج اتباع نصائح اضافة Lighthouse من قوقل بشأن الوصول accessibility. فقد تعطيك احيانا ملاحظات بشأن نسب تباين العناصر مع حاوياتها وغيرها من الملاحظات. حافظ على البساطة ولا تتكلف جدا.
  21. أظنك تحتاج في هذا خبرة عملية بالواجهة الخلفية، او على الأقل الاستعانة بمطور واجهات خلفية. لأن هاته البيانات التي تنوي المحافظة عليها سيتم تخزينها في الغالب على مستوى الخوادم في قواعد البيانات. فحينما يتم طلب صفحة ما، يتم بعد أو أثناء التحميل جلب البيانات وحقنها الى الصفحة وعرضها بالشكل الذي تريده. وفي الأخير، سيمكن للمتصفح ان يلتقطها ويفسرها بالشكل الذي نرى به مواقع الويب في المتصفحات. وبما ان هاته البيانات ستكون مخزنة بمكان واحد، يمكنك الوصول اليه من اي متصفح من العالم. فلن يتطلب العملاء او زوار الموقع او مستعملي هذا التطبيق امتلاك نسخة من هذا السكربت حتى يمكنهم الوصول. حيث سيمكنك عمل الية لتسجيل الدخول وتوثيق الطلبيات قبل منح اي صلاحية لاستعمال هذا التطبيق. وبالطبع فان هذا متحكم به من الواجهة الخلفية. يحدث احيانا ان يستعمل مطورو الواجهة الامامية التخزين المحلي للمتصفح لتخزين هاته البيانات واستعمالها، ولكن لا يعد هذا الخيار خيارا جيدا، ولا يعوض أبدا الواجهات الخلفية التي تعد المحرك الأول لكامل مواقع الويب.
  22. يمكنك الاستعانة بالوظيفة basename للحصول على اسم ملف ما تحدد مساره، للإشارة الى الملف الحالي يمكنك الاستعانة بـالثابت __FILE__ كالتالي: <?php $path = __FILE__; $filename = basename($path); echo $filename .'<br>'.$path; مثال عن الخرج: index.php C:\xampp\htdocs\dev\index.php تعرف اكثر عن الثوابت السحرية في PHP
  23. يمكنك تحويل المصفوفة التي لديك الى سلسلة نصية مفصول عن كل منها بفاصلة اجنبية ( , ) عن طريق الوظيفة implode . ثم بعد اسنادها الى متغير جافاسكربت ستقوم هاته الأخيرة بالتقاطها كمصفوفة ، يكون ذلك كالتالي: var js_array = [ "{{ implode('","' ,$php_array) }}" ]; مثال عملي: <?php $php_array = ['item1' ,'item2']; $str = '"'.implode('","', $php_array).'"'; ?> <script> var js_arr = [<?php echo $str ;?>]; console.log(js_arr); // ["item1","item2"] </script> خرج المصفوفة التي لديك مثلا سيكون كـ: ["1","Emad Saif","mail@gmail.com"] قد تحتاج التعرف أكثر على الوظيفة implode
  24. وعليكم السلام، يتحكم في هذا العديد من العوامل من مثل التقنيات والميزات التي تريد توظيفها في المشروع او توفرها في تطبيقك، فموقع موضوع مثلا عبارة عن مدونة متعددة المحررين، يمكنك لعملها الاستعانة بأحد نظم ادارة المحتوى من مثل وردبرس أو توظيف احد المبرمجين لبرمجة كامل جزئيات التطبيق برمجة خاصة من الصفر. على أن الثانية أفضل من ناحية عدم محدودية التعديل والقدرة عليه. يمكنك الاستعانة بموقع مستقل لتوظيف أحد الخبراء. عموما، قد تكون تكلفة موقع على الوردبرس على الأقل 100$. في حين أن البرمجة الخاصة قد تكلف بجانب ما تعطي من مميزات أكثر. ان كنت لا تعرف الفرق بين البرمجة الخاصة ووردبرس يمكنك الاستزادة بالاطلاع على إجابات ايهما افضل للمبرمج والزبون بناء موقع على wordpress او بناء موقع php تقليدي؟
  25. يمكنك الاستعانة بالوظيفة str_replace لاستبدال اي كسر للسطر line break بفراغ أو لا شيء، يعبر عنها بـ \r أو \n : <?php $bio = "string multiline string with empty lines and extra spaces"; $bio = str_replace(["\r", "\n"],'',$bio); echo $bio; الخرج: stringmultiline stringwith empty lines and extra spaces توثيق الدالة str_replace()‎ في PHP
×
×
  • أضف...