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

Adnane Kadri

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

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

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

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

    52

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

  1. أكيد، يمكنك استخدام ذات المنطق في أي لغة واجهة خلفية أو اطار عمل. ستختلف طريقة التنفيذ وتبقى العملية واحدة.
  2. كفكرة يمكنك ارسال معامل يميز نافذة التبويب المفتوحة الى الواجهة الخلفية، ثم بعد استقباله اعادة ارساله مجددا الى الواجهة الامامية. سيمكن التعامل معه آنها لفتح نافذة التبويب المستهدفة. مثال: <div class="tab" id="add_users_tab"> <form> .. <input type="hidden" name="active_tab" value="add_users_tab" /> </form> </div> سيستقبله الخادم ويعيد ارساله في الرد كمتغير active_tab$ مثلا. ستعيد الواجهة الامامية استقباله كـ: <script> var active_tab = "<?php echo $active_tab; ?>"; </script> ثم سيتم البحث عن النافذة المرافقة واظهارها عن طريق الواجهة البرمجية لبوتستراب: <script> var active_tab = "<?php echo $active_tab; ?>"; var target = document.querySelector("#"+active_tab); var tab = new bootstrap.Tab(target) tab.show() </script> بالطبع فإن هاته فكرة اولية عن الموضوع، يمكنك تطويرها أكثر.
  3. هل تقصد أن هنالك العديد من نماذج الادخالات موزعة في نوافذ تبويب bootstrap. بعد تقديم نموذج ما منها يتم معالجته من قبل الواجهة الخلفية ثم يعاد المستخدم ويعرض له نفس نافذة التبويب التي قدم من عليها النموذج أي تلك التي كان فيها؟
  4. لا أظن ذلك، رغم أنه من العملي تدوين الملاحظات او خطوات العمل بخصوص هاته الاكواد. بدلا من ذلك، يمكنك كتابتها في ملفات خاصة بها وحفظها كمرجع شخصي. فعلى سبيل المثال، ان كنت تتعلم لغة HTML وتحتاج استذكار بعض الوسوم واستعمالاتها، يمكنك بدل تدوين كل نقطة إنشاء مرجع شخصي عبارة عن سلسلة من ملفات الـ HTML التي تشرح كل وسم على حدة. بهاته الطريقة ستكون طبقت هذا المفهوم عمليا بالإضافة الى حفظه بطريقتك الخاصة. وأكيد، لا عيب في كتابة الشيفرات في ورق او مذكرة ان كان ذلك جيدا لك. على أنه سيأخذ منك وقتا أطول مما ستأخذه منك كتابة الأكواد في محررات أكواد خاصة بها. سيمكنك بها إيجاد الكثير من الأدوات المساعدة مثل التدقيق والمسافات البادئة indents والتكملة التلقائية للشيفرات، مثل هاته الأمور لا تكون متوفرة على الورق.
  5. هنالك مشكلة بالصورة المرفقة، هلا قمت بإعادة ارفاقها؟
  6. لما لا تقوم فقط عن طريق الجافاسكربت بالتحقق من ما ان كان العنصر body يحوي الصنف rtl او لا؟ var isRtl = document.body.classList.contains('rtl') سيمكنك اسناد هاته القيمة البوليانية الى قيمة الخاصية rtl $('.testimonial-slider').slick({ .. rtl:isRtl,
  7. كتطبيق آخر، يمكنك ايضا تضمين الملف الرئيسي للتنسيقات وتحته ملف التنسيقات RTL كـ: <link rel="stylesheet" href="{{ asset($activeTemplateTrue.'css/custom.css') }}"> <link rel="stylesheet" href="{{ asset($activeTemplateTrue.'css/rtlcustom.css') }}"> على أن ملف تنسيقات rtlcustom سيقوم بتحديد العناصر عن طريق محددات العناصر السليلة descendant combinator التي تتفرع عن العنصر body الذي يمتلك الصنف rtl. بمعنى أن أصنافك ستكون كـ: body.rtl .my-custom-item{ // اية تنسيقات } بهاته الطريقة، لن يكون عليك كتابة التنسيقات من جديد، وانما ستحتاج فقط تجاوز التنسيقات الغير مضبوطة في الاتجاه rtl. لاحظ أن rtlcustom.css يجب تضمينه بعد custom.css ليمكن تجاوز اي تنسيقات معرفة في الملف الأول. وبطبيعة الحال فإننا سنضيف الصنف rtl للعنصر body بشكل شرطي: <body class="@if(app()->getLocale() == 'ar') rtl @endif"> محددات العناصر السليلة
  8. ان كانت المشكلة في اتجاه المكون فقط، فيمكنك استثناء اتجاه عارض الشرائح وضبطه باتجاهه الافتراضي الذي كان عليه دون باقي الصفحة. بما أنك تستعمل حزمة slick carousel فيمكنك الاستعانة بالخاصية rtl لضبط اتجاه عارض الشرائح على true او false (التي تكون مضبوطة افتراضا): $('.testimonial-slider').slick({ .. rtl:true, ايضا قد تحتاج تحديد الخاصية dir للعنصر testimonial-slider بما يوافق هذا التعديل.
  9. صحيح، لأنها موجودة كـ getLocale وليس كـ getLocal بدون e. لما تريد الوصول اليه؟ يمكنك الاستغناء عنه مؤقتا. لأنه لن يقوم بأي شيء سوى جلب اللغة الافتراضية من قاعدة البيانات. ونحن لا نقوم بهذا حاليا. بل نقوم بتعيينها من الجلسة فقط. راجع الإجابة السابقة.
  10. جميل، يتم هنا قراءة اللغة الافتراضية من قاعدة البيانات. يمكن بهذا الشكل تعيينها من قبل المشرف من على لوحة التحكم ليتحكم في اللغة الافتراضية لزوراه مثلا. يمكنك التطوير عليها أكثر. هلا قمت بتفعيل وضع تشخيص الأخطاء؟ من ملف متغيرات البيئة env.قم بضبط APP_DEBUG لـ true وابحث في تفاصيل المشكلة.
  11. نعم يمكنك تغييرها ديناميكيا عن طريق الواجهة App. وهو ما قصدته بـ: كمقاربة عملية، اقوم في تطبيقات لارافيل التي تتطلب أكثر عن من لغة بإنشاء طبقة وسيطة Middleware لتعيين اللغة كل مرة يتم طلب مسار جديد. فلو قمت مثلا بطلب المسار /home سيتم قبل اي شيء، اعداد اللغة المرادة ثم اكمال الطلب مثل عرض الصفحة. كمكان جيد يتم فيه تخزين اللغة التي يريدها المستخدم نستخدم الجلسات Session. يكون ملف الطبقة الوسيطة على نحو: class SetLanguageMiddleware { public function handle(Request $request, Closure $next) { if(Session::has('locale')){ App::setLocale(Session::get('locale')); } else{ App::setLocale('ar'); } return $next($request); } } تقوم هاته الطبقة بالبحث في الجلسة عن اي قيمة مخزنة لـ locale. فان كانت موجودة قامت بتعيين القيمة الموجودة كلغة للتطبيق. وفي حال عدم وجود اي قيمة، سنقوم بتعيين لغة افتراضية مثل طرف الشرط else الآن سنحتاج تسجيل هاته الطبقة الوسيطة ضمن مصفوفة الطبقات الوسيطة web في ملف app/Kernel.php : 'web' => [ .. \App\Http\Middleware\SetLanguageMiddleware::class, لأننا نحتاج هاته المقاربة في كامل مسارات تطبيق الويب الذي لدينا ولا نريد ان يحصل ذلك في مسارات معينة فقط. الآن نحن نحتاج الى طريقة ما لتبديل قيمة المفتاح locale في الجلسة وفقط، لأننا نعلم ان الطبقة الوسيطة المنشئة حديثا ستتعامل معه بشكل منفصل. يمكنك انشاء متحكم ما لذلك يحوي منطقا مشابها لـ: public function switchLaguage($locale) { if(in_array($locale ,['en' ,'ar'])) { App::setLocale($locale); Session::put('locale' ,$locale); } return back(); } نتحقق هنا من ما ان كان القيمة التي يطلبها المستخدم ضمن اللغات المتوفرة ar , en . بعد هذا نقوم بتعيين قيمة جديدة لقيمة المفتاح locale في الجلسة. ثم نعيد المستخدم الى الصفحة التي كان فيها. ما بين الإعادة والعرض ستشتغل الطبقة الوسيطة وتعين لك المفتاح في الجلسة.
  12. هل تقصد تلك الكائنة بملف اعداد التطبيق app.php؟
  13. يمكنك تقييد تحديد اتجاه الصفحات بشرط يتحقق من ما ان كانت اللغة ar لوضع التنسيق direction:rtl الخاصية dir="rtl" على نحو: <html @if( app()->getLocal() == 'ar') dir="rtl" @else dir="ltr" @endif> ... <style> * { direction: @if( app()->getLocal() == 'ar') rtl @else ltr @endif; } </style> بالتأكيد فان هذا يكون في واحدة من ملفات القالب layouts من مثل app.blade.php ليتم تطبيقها بشكل عام على كامل الصفحات الفرعية.
  14. هل تقصد اتجاه الصفحات والعناصر؟
  15. لارافيل يفصل بين هاذين المكونين، لا يوجد أي تداخل بينهما. يمكنك مباشرة البدء بتعريف المفاتيح والقيم في ملفات اللغات واستعمالها في ملفات العرض لديك. {{ __('messages.welcome') }} هل تقصد تقصد انشاء طبقة وسيطة middleware لتمرير اللغة الى الواجهة App من الموجه نفسه قبل انشاء الوصول الى المتحكم او ملف العرض؟ حيث تأخذ هاته الطبقة الوسيطة اللغة من الجلسة Session مثلا.
  16. يفترض ان تكون عملية الحذف مسندة بشكل ما الى حدث الضغط على زر الحذف. مثل: button.addEventListener('click' ,function(){ removeTask(this.value) // يمكنك تخزين اسم الاختبار في خاصية ما للزر // باقي شيفرة حذف العنصر من واجهة المستخدم })
  17. بالطبع فان هذا ينطبق على ملف التنسيقات الخاص بالحزمة ايضا: import 'aos/dist/aos.css';
  18. هل تظهر اي رسالة خطأ في نافذة الطرفية؟ هل يتم اخبارك AOS غير معرف؟ Uncaught ReferenceError: AOS is not defined أظنك نسيت تضمين المكتبة في ملف index.js أو app.js أو ما يقابله لديك على نحو: import AOS from 'aos' سيكون عليك اعادة تشغيل npm run dev او npm run build واعادة استعراض المشروع.
  19. لحذف العناصر من التخزين المحلي يمكنك الاشارة اليها عن طريق مفتاحها باستعمال التابع 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
  20. في جافا يستعمل الكائن 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
  21. يستبعد أن يكون ذلك، الصفحة تظهر لدي بشكل عادي. زووم تقوم بعرض صفحة تصف البلدان أو المناطق المحظورة وهي: كوبا ايران كوريا الجنوبية سوريا اوكرانيا هاته المناطق لا يمكنها الوصول الى خدمات zoom او الاستفادة منها. ان كنت من احد هاته الدول، قد تصادف مشاكل في ذلك. ان كان غير ذلك، تأكد من تغيير المتصفح او محو التخزين المؤقت الخاص بالمتصفح.
  22. لا يوجد أي سر بالموضوع، توجد الكثير من المحطات التي تعرض مثل هاته الواجهات البرمجية. فهي بشكل مبسط تقدم روابط مصدرية لعناصر audio يمكنك استغلالها في اسنادها الى عناصر audio لديك. ستحتاج بطبيعة الحال العثور على نقطة وصول API لجلب المقطع الصوتي او البث الجاري حاليا. ثم عن طريق التلاعب بشجرة الوثيقة، سيمكن حقن هذا المحتوى الى عنصر HTML وعرضه ضمن الصفحة. موقع RapidAPI مثلا يعرض سلسلة طويلة من الواجهات البرمجية، ابحث عن ما يوفر هاته الخدمة في احده. وجدت هاته الواجهة مثلا: 30,000 radio stations and music charts يمكنك جلب البث الصوتي الجاري حاليا مثلا عن طريق ارسال المعامل nowPlaying بالقيمة true الى نقطة الوصول الموصوفة بالفعل GET. يوجد ايضا على ذات المنصة: واجهة &nbsp;Shazam API واجهة iTunes API واجهة spotify
  23. مبدئيا، كلاهما يغطيان كل من النقاط التي تصفينها. لارافيل يمكنه بناء متجر الكتروني متكامل و Asp.net أيضا. لارافيل يربط مع وسائل الدفع بشكل عادي، و Asp.net أيضا. يمكن تشغيل كليهما ورفعه بصورة جد عادية. يغطي كليهما كمية هائلة من الاضافات والوحدات الجاهزة. يمكنك العمل بكليهما. من ناحية السرعة والآداء يعد Asp.net أسرع نسبيا من لارافيل من ناحية تنفيذ الشيفرات. رغم أن هذا معيار السرعة يتحكم فيه أكثر ما هو من كون اللغة مفسرة او مترجمة. من مثل جودة الشيفرات. من ناحية قابلية التوسع كلاهما يفي بالغرض، ويمكن بناء مشاريع متوسطة الى كبيرة قابلة للتوسع بكليهما. من ناحية التكلفة أظن ان ASP.net يفرض رسوما شهرية اضافية من ناحية الاستضافة، على عكس لارافيل التي تكون رسومه قياسية وخاصة بخدمات الاستضافة فقط. سوق العمل لو تحدثنا عن السوق العربي كعينة والتنقيات المطلوبة في مواقع حسوب حصرا (مثل خمسات ، مستقل وبعيد)، سنلحظ أن لارافيل مطلوب أكثر من .Net بشكل كبير سواء من اصحاب المشاريع أو من المقبلين على المجال أو حتى من ناحية المطورين المشتغلين بالفعل (يمكنك استعراض ذلك نفسك). أما من ناحية الحصة السوقية العالمية لـ asp.net فهي شريحة اكبر من لارافيل إذ يأخذ asp.net نسبة 8.18 من حصة السوق بحجم 82 مليون نقطة وصول في حين ان لارافيل يأخذ 0.32 بحجم 7 ملايين نقطة وصول contact حسب موقع Datanyze. طبعا لا يخفى أن Asp.net موجود من قبل لارافيل، وهو شيء يجب الالتفات اليه هو الآخر. الاقبال المتزايد على لارافيل يعطيه أفضلية أيضا. في الأخير، حددي شريحتك المستهدفة. طبيعة مشاريعك التي تتوقعين العمل عليها. ثم اختاري احدهما. فكلاهما يفي بالغرض.
  24. أظن انه ينبغي فهم كل منهما ثم ادراك الفرق بينهما ليكون من الممكن اختيار احدهما عن الآخر. 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
  25. تعمل جميع تطبيقات هيروكو في مجموعة من حاويات في لينكس تسمى dynos. الخطأ H20 طبقا لتوثيق هيروكو يعني أن هنالك مشكلة بتشغيل أحد هاته الحاويات. يوصف ايضا ان هذا النوع من الخطأ يخص إعداد الحاوية وبدء تشغيل التطبيق وغيره. هيروكو لا تقرأ من ملف متغيرات البيئة، هي تأخذ ذلك عن قسم config vars وأنت لا تقوم بتعريف المنفذ هنالك، فهي تعتمد المنفذ 8080 دوما. يحتمل أن يكون المنفذ مأخوذا من قبل حاوية ويب Dyno أخرى. جرب تغيير المنفذ أولا، وليكن الى 3000 مثلا. قد تحتاج ايضا الى تنفيذ الأمر: heroku ps:restart web.1 لاعادة تشغيل الحاوية المستهدفة (1 يرمز الى فهرس الحاوية لديك، يمكنك تغييره بما يوافق حاوية تطبيقك) أو تشغيل كامل حاويات الويب: heroku ps:restart web أو ربما كامل الحاويات: heroku ps:restart (بالطبع فان هذا يكون عن طريق heroku cli).
×
×
  • أضف...