-
المساهمات
5233 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
52
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
كل منشورات العضو Adnane Kadri
-
لارافيل يفصل بين هاذين المكونين، لا يوجد أي تداخل بينهما. يمكنك مباشرة البدء بتعريف المفاتيح والقيم في ملفات اللغات واستعمالها في ملفات العرض لديك. {{ __('messages.welcome') }} هل تقصد تقصد انشاء طبقة وسيطة middleware لتمرير اللغة الى الواجهة App من الموجه نفسه قبل انشاء الوصول الى المتحكم او ملف العرض؟ حيث تأخذ هاته الطبقة الوسيطة اللغة من الجلسة Session مثلا.
- 13 اجابة
-
- 1
-
-
يفترض ان تكون عملية الحذف مسندة بشكل ما الى حدث الضغط على زر الحذف. مثل: button.addEventListener('click' ,function(){ removeTask(this.value) // يمكنك تخزين اسم الاختبار في خاصية ما للزر // باقي شيفرة حذف العنصر من واجهة المستخدم })
- 4 اجابة
-
- 1
-
-
هل تظهر اي رسالة خطأ في نافذة الطرفية؟ هل يتم اخبارك AOS غير معرف؟ Uncaught ReferenceError: AOS is not defined أظنك نسيت تضمين المكتبة في ملف index.js أو app.js أو ما يقابله لديك على نحو: import AOS from 'aos' سيكون عليك اعادة تشغيل npm run dev او npm run build واعادة استعراض المشروع.
- 3 اجابة
-
- 1
-
-
لحذف العناصر من التخزين المحلي يمكنك الاشارة اليها عن طريق مفتاحها باستعمال التابع removeItem عن الكائن localStorage كـ: window.localStorage.removeItem('item_key'); يمكنك استعمال هذا التابع بكفاءة في مثال مثل وضعه في وظيفة واسناده الى حدث الضغط على زر الحذف. لم اجد حدث الحذف مبينا لديك. أظن أنك تحتاج تنظيم الشيفرة أكثر. في مثالك أرى أنك تقوم بتخزين سلسلة نصية من القيم مسندة الى المفتاح value. ولذلك فإن تعيين عنصر جديد في التخزين المحلي سيكون بـ: جلب قيمة المفتاح value تجزئة السلسلة النصية الى مجموعة القيم المفصولة بفاصلة , تخزين هاته القيم في مصفوفة اضافة قيم جديدة الى هاته المصفوفة دمج هاته المصفوفة في سلسلة نصية جديدة تشكل هاته القيم مفصولة بفاصلة , اعادة اسناد القيمة الجديدة الى المفتاح value ثم ان نفس العملية ستكون عند حذف عنصر ما، سوى ان الحذف سيختلف عن الاضافة في المرحلة رقم 4. فنحن سنقوم فيها بازالة العنصر المبين من المصفوفة قبل اعادة دمجها في سلسلة نصية واعادة اسنادها الى المفتاح value. سيتبع ذلك منطقا مشابها: /** * ازالة عنصر موجود بالفعل * * @param {string} task_name * @return void */ function removeTask(task_name) { let old_value = localStorage.getItem("value"); // c++, php , js let tasks = old_value.split(",") // [c++, php , js] .filter(task => { return task !== task_name }) // فلترة المصفوفة بازالة العنصر المشار اليه .join(",") // اعادة التجميع في سلسلة نصية localStorage.setItem("value" ,tasks) // اعادة اسناد قيمة جديدة } /** * اضافة عنصر جديد * * @param {string} task_name * @return void */ function addTask(task_name) { let old_value = localStorage.getItem("value"); // c++, php , js let tasks = old_value.split(",") // [c++, php , js] .push(task_name) // اضافة عنصر جديد .join(",") // اعادة التجميع في سلسلة نصية localStorage.setItem("value" ,tasks) // اعادة اسناد قيمة جديدة } يمكنك توظيفها في مثالك بحسب حاجتك. لتخزين المحلي (Local Storage) في HTML5
- 4 اجابة
-
- 1
-
-
في جافا يستعمل الكائن StringBuffer لتخزين البيانات بالنوع النصي string لغرض التعديل عليها بشكل اسهل من خلال مجموعة التوابع الجاهزة الخاصة بها. مثال عن كيفية انشاء نسخة عن كائن StringBuffer: class ExampleClass { public static void main(String[] args) { StringBuffer textBuffer = new StringBuffer("hsoub academy "); System.out.println(textBuffer); } } النتيجة: hsoub academy يمتلك هذا الكائن كل من التوابع: append لإضافة مقطع او سلسلة نصية الى السلسلة النصية الام المحقونة الى باني الكائن StringBuffer insert لحقن سلسلة نصية معينة في موضع نحدده replace لاستبدال سلسلة معينة نحددها بفهرسين ضمن السلسلة الام مثال عملي: class ExampleClass { public static void main(String[] args) { StringBuffer textBuffer = new StringBuffer("hsoub academy "); // textBuffer.append("is cool"); // hsoub academy is cool // textBuffer.insert(6 ,"is a great "); // hsoub is a great academy // textBuffer.replace(0 , 6 , " "); // academy System.out.println(textBuffer); } } قم بالغاء تعليق كل سطر من المضلل كل مرة واختبر النتيجة. قد تحتاج أيضا الاطلاع على ما الفرق بين String و StringBuffer في جافا؟ و أيضا الفرق بين StringBuilder و StringBuffer
- 1 جواب
-
- 1
-
-
يستبعد أن يكون ذلك، الصفحة تظهر لدي بشكل عادي. زووم تقوم بعرض صفحة تصف البلدان أو المناطق المحظورة وهي: كوبا ايران كوريا الجنوبية سوريا اوكرانيا هاته المناطق لا يمكنها الوصول الى خدمات zoom او الاستفادة منها. ان كنت من احد هاته الدول، قد تصادف مشاكل في ذلك. ان كان غير ذلك، تأكد من تغيير المتصفح او محو التخزين المؤقت الخاص بالمتصفح.
-
لا يوجد أي سر بالموضوع، توجد الكثير من المحطات التي تعرض مثل هاته الواجهات البرمجية. فهي بشكل مبسط تقدم روابط مصدرية لعناصر audio يمكنك استغلالها في اسنادها الى عناصر audio لديك. ستحتاج بطبيعة الحال العثور على نقطة وصول API لجلب المقطع الصوتي او البث الجاري حاليا. ثم عن طريق التلاعب بشجرة الوثيقة، سيمكن حقن هذا المحتوى الى عنصر HTML وعرضه ضمن الصفحة. موقع RapidAPI مثلا يعرض سلسلة طويلة من الواجهات البرمجية، ابحث عن ما يوفر هاته الخدمة في احده. وجدت هاته الواجهة مثلا: 30,000 radio stations and music charts يمكنك جلب البث الصوتي الجاري حاليا مثلا عن طريق ارسال المعامل nowPlaying بالقيمة true الى نقطة الوصول الموصوفة بالفعل GET. يوجد ايضا على ذات المنصة: واجهة Shazam API واجهة iTunes API واجهة spotify
- 1 جواب
-
- 1
-
-
مبدئيا، كلاهما يغطيان كل من النقاط التي تصفينها. لارافيل يمكنه بناء متجر الكتروني متكامل و Asp.net أيضا. لارافيل يربط مع وسائل الدفع بشكل عادي، و Asp.net أيضا. يمكن تشغيل كليهما ورفعه بصورة جد عادية. يغطي كليهما كمية هائلة من الاضافات والوحدات الجاهزة. يمكنك العمل بكليهما. من ناحية السرعة والآداء يعد Asp.net أسرع نسبيا من لارافيل من ناحية تنفيذ الشيفرات. رغم أن هذا معيار السرعة يتحكم فيه أكثر ما هو من كون اللغة مفسرة او مترجمة. من مثل جودة الشيفرات. من ناحية قابلية التوسع كلاهما يفي بالغرض، ويمكن بناء مشاريع متوسطة الى كبيرة قابلة للتوسع بكليهما. من ناحية التكلفة أظن ان ASP.net يفرض رسوما شهرية اضافية من ناحية الاستضافة، على عكس لارافيل التي تكون رسومه قياسية وخاصة بخدمات الاستضافة فقط. سوق العمل لو تحدثنا عن السوق العربي كعينة والتنقيات المطلوبة في مواقع حسوب حصرا (مثل خمسات ، مستقل وبعيد)، سنلحظ أن لارافيل مطلوب أكثر من .Net بشكل كبير سواء من اصحاب المشاريع أو من المقبلين على المجال أو حتى من ناحية المطورين المشتغلين بالفعل (يمكنك استعراض ذلك نفسك). أما من ناحية الحصة السوقية العالمية لـ asp.net فهي شريحة اكبر من لارافيل إذ يأخذ asp.net نسبة 8.18 من حصة السوق بحجم 82 مليون نقطة وصول في حين ان لارافيل يأخذ 0.32 بحجم 7 ملايين نقطة وصول contact حسب موقع Datanyze. طبعا لا يخفى أن Asp.net موجود من قبل لارافيل، وهو شيء يجب الالتفات اليه هو الآخر. الاقبال المتزايد على لارافيل يعطيه أفضلية أيضا. في الأخير، حددي شريحتك المستهدفة. طبيعة مشاريعك التي تتوقعين العمل عليها. ثم اختاري احدهما. فكلاهما يفي بالغرض.
- 2 اجابة
-
- 1
-
-
أظن انه ينبغي فهم كل منهما ثم ادراك الفرق بينهما ليكون من الممكن اختيار احدهما عن الآخر. Bootstrap عبارة عن اطار عمل (مجموعة من أدوات الويب من CSS و JS) تستعمل نظام التقطيع الشبكي grid system بجانب ملحقات جافاسكربت لإنشاء تصاميم ومكونات متجاوبة ومرنة مع كامل شاشات العرض. استعلامات الوسائط او media queries هي قواعد CSS نستعملها لتطبيق أنماط او تنسيقات معينة بناءا على شروط معينة. من مثل: نطبق مجموعة تنسيقات في حالة ما كانت شاشة العرض أقل من 900 بكسل. @media screen and (min-width: 900px) { article { padding: 1rem 3rem; } } تتألف استعلامات الوسائط من: نوع الوسائط media type من مثل: all, screen, print , speech ميزات الوسائط media feature وهي أشياء تميز نوع الوسائط المختار من مثل min-width المعاملات المنطقية logical operator، لدمج او استهداف انواع من الوسائط. من مثل: and أو not أو only تستعمل بشكل فعال جدا في جعل التصاميم متجاوبة مع شاشات العرض. متى نستخدم استعلامات الوسائط: تعد أخف حجما بشكل يجعل الصفحة اسرع واحسن آداء, أسهل من ناحية قابلية التخصيص والتحكم في العناصر. رغم هذا سنجد أننا نكتب الكثير من القواعد كلما كبر المشروع. متى نستخدم بوتستراب: عند الحاجة الى مكونات وحاويات وعناصر متجاوبة تلقائيا. نظام التقطيع الخاص به رائع ومرن جدا. ملخص القول، يمكنك الاعتماد على كليهما لأن بوتستراب نفسه مكتوب على CSS وقابل للتخصيص بشكل عادي جدا. القاعدة @media استعلامات الوسائط (Media Queries) في CSS توثيق اطار عمل Bootstrap
-
تعمل جميع تطبيقات هيروكو في مجموعة من حاويات في لينكس تسمى dynos. الخطأ H20 طبقا لتوثيق هيروكو يعني أن هنالك مشكلة بتشغيل أحد هاته الحاويات. يوصف ايضا ان هذا النوع من الخطأ يخص إعداد الحاوية وبدء تشغيل التطبيق وغيره. هيروكو لا تقرأ من ملف متغيرات البيئة، هي تأخذ ذلك عن قسم config vars وأنت لا تقوم بتعريف المنفذ هنالك، فهي تعتمد المنفذ 8080 دوما. يحتمل أن يكون المنفذ مأخوذا من قبل حاوية ويب Dyno أخرى. جرب تغيير المنفذ أولا، وليكن الى 3000 مثلا. قد تحتاج ايضا الى تنفيذ الأمر: heroku ps:restart web.1 لاعادة تشغيل الحاوية المستهدفة (1 يرمز الى فهرس الحاوية لديك، يمكنك تغييره بما يوافق حاوية تطبيقك) أو تشغيل كامل حاويات الويب: heroku ps:restart web أو ربما كامل الحاويات: heroku ps:restart (بالطبع فان هذا يكون عن طريق heroku cli).
-
هذا ليس خطأ، هذا تنفيذ للأمر npm run dev الموافق للأمر vite المبين في ملف package.json : "scripts": { "dev": "vite", "build": "vite build" }, وما تحاول القيام به ليس انشاءا لنظام التوثيق authentication وانما تجميع ملفات الاصول assets من ملفات العمل داخل مجلد resources. الأمر الذي تحتاج تنفيذه هو npm run build وهو الموافق للأمر vite build من ذات الملف السابق. لارافيل الآن يستعمل vite بدل laravel-mix مثلما كان سابقا، ولذلك فان هنالك بعض الجزئيات التي يلحظ أنها تغيرت، مثل اسطر تضمين ملفات الاصول في ملفات عرض الـ layouts. قد تحتاج القراءة أكثر عن هذا التغيير هنا:
-
يعني الخطأ انك تستعمل الوظيفة explode بشكل خاطئ. لاحظ اين يتم وصف هاته الوظيفة: function getMatchedWordsFromString($result ,$search) { $words = explode(' ',$result); // توزيع كلمات العنوان في مصفوفة // البحث عن الجزء المبحوث عنه في كل كلمة من كلمات العنوان $suggestions = []; foreach($words as $word){ if(preg_match("/{$search}/i", $word)){ // في حالة احتواء الكلمة على الكلمة المفتاحية array_push($suggestions ,$word); // اضافتها الى مصفوفة الاقتراحات } } return $suggestions; } اين اننا نقوم بتوزيع كلمات العنوان في مصفوفة. هل نمرر سلسلة نصية الى الوظيفة getMatchedWordsFromString كمعامل ثان بالفعل؟ اين نقوم بذلك؟ هنا: foreach($searchRslt as $result){ $suggestions = array_merge( $suggestions , getMatchedWordsFromString($result ,$search) ); print_r($suggestions); } هل result القادمة من حلقة foreach التي نمررها الى وظيفتنا سلسلة نصية؟ تأكد من ذلك
-
كل لغات الواجهة الخلفية قادرة على تحقيق ذلك.أما فيما يخص الواجهة الامامية فهي الأخرى تكتب وتبنى بـ HTML و CSS و جافاسكربت ولا يوجد أدوات او لغات أخرى يمكن المفاضلة بينها. توفر قوقل واجهة برمجية للتعامل مع خرائطها بأي لغة كانت، لذا لا يجب عليك القلق كثيرا بشأن الآداة التي يمكنها القيام بذلك. ان كانت مواقعك ثابتة غير ديناميكية، فسيمكنك تحقيق ذلك عن طريق أدوات الواجهة الأمامية فقط، وقد لا تحتاج أصلا لواجهة خلفية إلا لأغراض أخرى. أظن أن أسئلة من مثل "ما افضل لغة" و "ما افضل اطار" لا يصل فيها السائل الى جواب مقنع، لتضارب واختلاف الاجوبة فيما بينها. تعرف على المجال أكثر وجزء السؤال إلى أسئلة أكثر دقة وعلمية وسيمكنك شق طريقك فيه. قد تستفيد من الاجابات على هذا السؤال: ماهي افضل لغة لتطوير الويب .؟
-
webpack في الاصل هو مجمع ملفات او بشكل ادق مجمع وحدات module bundler تقوم بتجميع عدد من ملفات الجافاسكربت، الـ HTML والcss لتجعلها في ملف واحد، وبهذا المنطق تتيح الكثير من الميزات الأخرى على سبيل: امكانية تقسيم الشيفرات وتجزئتها. استخدام المحملات لتحميل وتفسير انواع معينة من الملفات مثل sass. فصل بيئة التطوير عن بيئة الانتاج. وغيرها الكثير.. عيب هاته الطريقة انها قد تأخذ الكثير من الوقت أثناء عملية التطوير. لنقل مثلا أنك تستخدم 2000 وحدة نمطية في تطبيق كبير لديك. الآن عملية بناء او تجميع او تحزيم هاته الوحدات قد ياخذ وقتا طويلا جدا بادئ الأمر. ثم ستكون عملية الاستماع الى التغييرات هي الأخرى بطيئة (رغم التخزين المؤقت) لأن ويب باك تقوم كل مرة بإعادة تجميع كامل الملفات واخراجها في ملف واحد كل مرة ولا تستثني الملفات الغير معدلة، هذا بجانب تشغيل كامل المحملات والوحدات الاخرى. ويتم تقديم laravel-mix كآداة توفر واجهة تطبيقات برمجية للعمل بـ webpack بشكل أكثر فعالية في تطبيقات لارافيل لذات الغرض السابق. يأتي Vite هنا لتقديم حل استثنائي لتحسين تجربة التطوير وتسريعها، فالفكرة الاساسية منه هو تحويل وتقديم جزء من شيفرة التطبيق الخاص بك عندما يطلب المتصفح ذلك وفقط. فعند بداية عملية التطوير سيقوم Vite بتقسيم وحدات جافاسكربت الخاصة بك الى فئتين: dependency modules أو وحدات التبعية، وهي الوحدات التي يتم تحميلها وطلبها من node_modules. يتم ذلك عن طريق مجمع يدعى esbuild هو مكتوب بلغة Go ويعد اسرع بـ 10 الى 100 مرة من ويب باك. application modules او وحدات التطبيق، وهي الوحدات التي تشتغل عليها او بالأحرى هي ملفات تطبيقك. ويبباك تقوم بتجميع كل ما ينتمي لكليهما واخراجهما في ملف واحد كل مرة تطلبه. يدعى هذا بـ bundler-based workflow او سير العمل القائم على التحزيم. Vite تقوم فقط بتجميع وحدات التبعية الخاصة بك، في حين ان وحدات التطبيق تقدم فقط حينما يتم طلبها او في لحظة ما تكون مستعملة من طرف صفحة ما او مكون ما. تسمي Vite هذا بـ vite ESM-based dev build أو سير العمل القائم على وحدات ES. بمعنى أنه قادر على معالجة التطوير الخاص بك بشكل أسرع كثيرا من Webpack. وقد لا تلحظ هذا مع تطبيقات عادية، ولكن ستزداد الحاجة الى تجميع اسرع مع ازدياد حاجيات التطبيق وتوسعه. وبما أنه يخدم مفهوم التوسع scalability أكثر من ويب باك فإن لارافيل ضمته إليها هذا الاسبوع فقط ليزيد من حظ وقدرة لارافيل في بناء تطبيقات بأحجام عملاقة، بجانب المحافظة على تجربة تطوير جيدة الى ممتازة. يتفائل الكثير من المطورون باستعمال لارافيل له، ويرون أنه الجيل الجديد من ادوات بناء جافاسكربت بخدمته لمفهوم الوحدات في المتصفح، وهو مفهوم لم يكن شائعا قبله. وكتجربة شخصية، عملت بـ Vite في تطبيق واجهة أمامية بـ VueJS وكانت تجربة التطوير رائعة مقارنة بالتطبيقات التي اعتمدت على ويب باك فيها. وبما أن Vite مقدم من مطوري VueJS أنفسهم فأظن أنه سيكون هنالك تقارب أكثر بين VueJS و Laravel في المستقبل.
- 2 اجابة
-
- 9
-
-
-
في الجزائر، نفتقر الى واجهة تطبيقات برمجية لتوفير مثل هاته التعاملات بالشكل المألوف، عن طريق cURL مثلا. ولذلك نلجئ الى الكثير من الطرق الأخرى التي يستعملها الموقع الذي ارفقته مثلا. فكفكرة مثلا: يمكنك بيع أكواد بطاقات التعبئة بدل بيع الرصيد نفسه. أو القيام بالتحويلات يدويا من واجهة المشرف بعد تسجيل تفاصيل هاته الطلبيات في قواعد البيانات. وبدل ان يكون الموقع آداة للقيام بالشحن والتعبئة يكون وسيطا فقط في عملية شراء الرصيد والدفع. يمكنك مثلا عرض واجهة استخدام يمكن من على المستخدم اختيار بطاقة التعبئة الموافقة ثم ملئ بياناته الخاصة. بجانب انه يطلب منه ارفاق تفاصيل عملية التحويل (المبلغ الذي يشتري به) كملف مرفق (وثيقة PDF عن تحويل عن طريق بريدي موب مثلا أو صورة عن وصل دفع عن طريق الحساب البريدي الجاري CCP). وبالطبع يكون هذا بعد تزويد المستخدم ببيانات حسابكم في بريدي موب او حساب البريد الجاري بكم. الآن بعد ان يقوم المستخدم بالتحويل وتقديم طلب الشراء، سيتلقى المشرف هذا الطلب من على لوحة التحكم. سيمكن له فحص مصداقية التحويل والقيام بشحن الرصيد يدويا بالطريقة المألوفة. ان كنت تبحث عن طريق لجعل الموقع يقوم بما ستحتاج عمله يدويا، فلا أظن انه سيمكنك ايجاده بالشكل البسيط. كخدمة مدفوعة توجد مجموعة الحزم باسم Chargily التي توفر مثل هاته الخدمات الكترونيا (مثل تقديم مفتاح API للتعاملات عبر البطاقة الذهبية وبريدي موب).
- 3 اجابة
-
- 1
-
-
وعليكم السلام، أظن أن قراءة توثيق آداة او اضافة ما لن تكون بنفس الجهد الذهني الذي يتخذه المتعلم مثلا في تعلم لارافيل أو PHP. فالاطلاع الجيد على الادوات والتقنيات لن يكون بذات الدافع مثل التعرض الى نمط تفكير وهندسة جديد، او شيء جديد عليك كليا. وتجربة قراءة التوثيق نفسها لن تكون بحجم تجربة دخول المجال اول مرة وتعلم اول تقنية أو لغة مثلا. فالهدف سيكون فقط لمعرفة: ما الذي تفعله هاته التقنية تحديدا؟ أو كيف ستساعدني او تحل مشكلا ما لدي؟ وعليه، فإنه لن يكون عليك إلا فهم تعليمات التثبيت مثلا، طريقة الاستخدام او افضل الطرق لذلك. أو ربما متابعة نقاش جار حول مشكلة واجهتها بشأنه على github مثلا. وصحيح، أنه قد تنجر وراء أشياء أخرى وانت تحاول تعلم شيء ما، رغم هذا، يجب تنظيم عملية الاطلاع او القراءة وتصنيف ما الذي تحاول الاطلاع عليه مثلا كـ " مهم جدا " " مهم " " عادي ". لكنه لا يمكن ايقاف هاته العملية او تعطيلها. فهذا ما تفرضه طبيعة المجال المتغيرة والمتشعبة نفسه، فأنت ستضل تقرأ وتعرف عن المزيد من الأدوات. بجانب هذا، لن يجب عليك الاطلاع على JetStream أو Breeze أو fotify أو غيرها لتعلم لارافيل، فهو نفسه يقدمها ضمن مجموعة البدء الخاصة starter kits ويجعل العمل بها اختياريا ومنفصلا عن لارافيل نفسه. فكل منها هو اصلا تطبيقات عملية عن ميزات يأتي بها بالفعل. ولذلك فإن تعلم لارافيل والاطلاع اكثر عنه نفسه سيكفيك عن تعلمها في الوقت الحالي. ثم سيأتي الوقت الذي تجد فيه نفسك مندفعا الى تعلما بغرض تجنب تكرار نظم او افكار في تطبيقات لارافيل لديك. ما بين VueJS و Livewire كنت لأختار VueJS، رغم انك لست مرغما اصلا على الاختيار والتخلي عن احدهما مقابل الآخر. وقد يمكن فعليا استعمال كليهما في ذات المشروع. لأنهما مختلفان كليا، ف livewire اطار عمل لارافيل أما VueJS فهو اطار عمل الواجهة الأمامية. فلكل منهما استعماله وسياقه الخاص.
- 1 جواب
-
- 1
-
-
يمكنك التحقق من ما ان كان العنوان المدخل رابطا نسبيا يحوي داخله أحد النطاقات المقبولة، بهاته الطريقة سيمكنك قبول الروابط المتفرعة عن هذا الاصل: <?php /** * التحقق من ما ان كان رابط ما * نطاقا فرعيا عن احد النطاقات * المقبولة * @param string $target_url * @return boolean */ function is_valid_url($target_url) { $White_List = array("https://drive.google.com/", "https://1drv.ms/"); //Add Allowed Website list Here foreach($White_List as $url) { if(str_contains($target_url ,$url)) { return true; } } return false; } $user_url = "https://drive.google.com/path/to/target/drive"; echo is_valid_url($user_url); لاحظ ان الوظيفة str_contains موجودة فقط في PHP8، ان كنت تستخدم نسخا دون هاته النسخة. يمكنك عمل ذات الفكرة عن طريق strpos مثلا: if(strpos($target_url ,$url) !== false) { return true; } أو stripos ايضا: if(stripos($target_url ,$url) !== false) { return true; } الدالة strpos() في PHP الدالة stripos() في PHP
- 3 اجابة
-
- 1
-
-
بالطبع فإنه يجب في حالة ما كنت تنوين بناء تطبيقات أندرويد ديناميكية متغيرة المحتوى. على سبيل المثال: تطبيق لكتابة ملاحظات شخصية. هاته الملاحظات مثلا سيجب تخزينها في سجلات قواعد بيانات يتطلب التعامل معها معرفة بها. في أندرويد، يلجئ الكثير الى استعمال SQLite كقاعدة بيانات، وذلك لأن النظام يأتي معها. وهو نظام علائقي لإدارة قواعد البيانات. فـ SQLite تخزن بياناتها في ملف نصي يسهل الوصول إليه والقراءة منه. يكون استعمالها عمليا في حالة تخزين البيانات محليا فقط، أما في حالة رغبتك في مشاركة البيانات بين المستخدمين فهذا بالطبع سيتطلب خادم ويب وواجهة خلفية للتطبيق وواجهة برمجية. رغم أنه سيمكنك أيضا استعمال SQLite بشكل ما في تطوير هاته الواجهة إلا أنه لن تكون بذات المنطق. يمكنك الاستزادة بقراءة مقال: كيف ومتى نستخدم SQLite ان كنت تشتركين بدورة علوم الحاسوب فسيمكنك التعرض أكثر لمفهوم قواعد البيانات، بما في ذلك التعرف على قواعد البيانات بمختلف أنواعها والتعمق بمختلف جوانب لغة الاستعلام SQL، وتطبيقها عمليًا خطوةً بخطوة على قواعد بيانات SQLite.
-
في ملف package.json يمكنك استعمال الخيار DISABLE_ESLINT_PLUGIN وارفاقه بالقيمة true فيما يخص الامر start كالتالي: { "scripts": { "start": "DISABLE_ESLINT_PLUGIN=true react-scripts start", الآن ستحتاج تشغيل الامر: npm run start لاستعراضه بدون الاضافة أو بالاضافة معطلة.
-
هل حاولت استعمال التابع whereMonth هنا أيضا؟ مثلا: $op->transactions->whereMonth('created_at', now()->month )->get() لا تنسى تنفيذ الاستعلام عن طريق التابع get. يحتمل ان يكون هو مسبب المشكلة التي تحاول تفاديها: كملاحظات أخرى، من غير المقترح كتابة استعلامات قواعد بيانات في مكان غير النماذج Models. فهو تطبيق غير جيد ويضفي على الشيفرة الكثير من مشاكل عدم قابلية التوسع والقراءة ونظافة الشيفرة وغيرها. ان كنت تحاول جلب التحويلات الخاصة بعملية ما في هذا الشهر فسيكفيك تعريفها ضمن ملف النموذج واستعمالها بشكل عادي في ملف العرض: class Operation extends Model { .. public function transactionsOfThisMonth() { return $this->transactions->whereMonth('created_at' ,now()->month)->get(); } } ثم سيسعك استعمالها بشكل عادي كـ: @foreach($op->transactionsOfThisMonth() as $t ) ثالثا، لما تقوم بوضع الشيفرة كاملة داخلة عبارة شرطية if، لما لا تستعمل فقط متغير القالب continue الذي سيتحقق من الشرط في كل حلقة من التكرار ويجعل التكرار يستمر في حالة تحقق الشرط وفقط؟ @foreach ($operation as $op ) @if($op->doctor->id == 1) @continue @endif <h5> <label><img src="/images/Arrow.svg" alt="clock"></label> اســـــم الـحــالــه -> <a href="projects/{{ $op->project->id }}">{{ $op->project->name }}</a> </h6> @foreach ($op->transactions->where('created_at', '=', $time ) as $o ) <h5> {{-- <label><img src="/images/money.svg" alt="clock"></label> --}} 💵 المبلع المدفوع :<span> EGP {{ $o->payed }}</span> <?php $sum+= $o->payed; ?> </h6> @endforeach @endforeach نفس الشيء بالنسبة للمتغير sum، افترض أنك تقوم بتجميع كامل المبالغ المدفوعة وتعرض هذا المجموع بطريقة ما، صحيح؟ <?php $sum+= $o->payed; ?> لا يفترض ان تحمل ملفات العرض اي منطق من هذا الشكل. لما لا نقوم مثلا بتعريف تابع ما يقوم بكل هاته العملية من اجلنا. نقوم بتجميع كامل قيم payed من تحويلات هذا الشهر، ثم نطبق الوظيفة array_sum لحساب هذا المجموع. class Operation extends Model { .. public function sumOftransactionsOfThisMonth() { return array_sum( $this->transactionsOfThisMonth()->pluck('payed') ); } } لاحظ أننا استعملنا وظيفتنا السابقة. ثم سيمكننا استدعاء هاته الوظيفة اينما شئنا كـ: @foreach ($operation as $op ) {{ $op->sumOftransactionsOfThisMonth() }} ناتج الشيفرة: @foreach ($operation as $op ) @if($op->doctor->id == 1) @continue @endif <h5> <label> <img src="/images/Arrow.svg" alt="clock"> </label> <a href="projects/{{ $op->project->id }}"> {{ $op->project->name }} </a> </h5> @foreach ($op->transactions->where('created_at', '=', $time ) as $o ) <h5> {{-- <label><img src="/images/money.svg" alt="clock"></label> --}} 💵 المبلع المدفوع :<span> EGP {{ $o->payed }}</span> </h5> @endforeach @endforeach
- 4 اجابة
-
- 1
-