• الدعم الفني
  • مشكلة عند تصدير تقارير الطلاب في إضافة Learndash reports

السلام عليكم،

{مشكلة عند تصدير تقارير اختبارات الطلاب في Learndash?}

لما بحاول تصدير الـ user quiz data من learndash reports يواجهني الخطأ ده ومش عارف انزل الملف وانا محتاجه ضروري، ممكن لو حد واجه المشكلة دي قبل كده يقولي اقدر احلها ازاي؟

تسجيل الدخول لعرض الكود

    يونس محمد

    عليكم السلام، ومرحبا بك في مجتمع عرب ووردبريس.

    إذن مشكلتك هي ظهور هذا الخطأ عند محاولة تصدير تقارير الاختبارات، بالضغط على Export User Quiz Data من داخل إضافة Learndash تاب التقارير.

    لنوضح المشكلة التي تظهر لك بالتفصيل؛ فمعرفة السبب هو بداية الحل، وبعدها أذكر لك طريقة حل هذه المشكلة.


    لماذا تحدث هذه المشكلة عندك؟

    عندما تضغط على زر Export user quiz data، يتم تشغيل ملف الـ PHP المسؤول، ويتم تنفيذ عدة خطوات متتالية لمعالجة طلبك. وعندما وصل الكود للسطر رقم 140 في الملف التالي:

    تسجيل الدخول لعرض الكود

    واجه خطأ قاتل (Fatal error)، لم يتم التعامل معه (Uncaught Error)؛ مما أدى إلى توقف سلسلة الخطوات عند هذه النقطة.


    تفسير المشكلة ومعرفة الحل

    الرسالة التي تظهر لك توضح بأسلوب مبسط سبب حدوث هذا الخطأ القاتل، وهو Undefined constant (ثابت غير معرف)؛ حيث يبحث الـ PHP عن ثابت اسمه DB_CHARSET ولكنه غير معرف؛ مما أدى إلى توقف تنفيذ الكود من هذه النقطة.


    خطوات حل المشكلة

    إذن المطلوب لحل هذه المشكلة أن يتم تعريف الثابت DB_CHARSET.

    {تعريف الثابت DB_CHARSET في ملف wp-config?}

    وفقًا لتعليمات ووردبريس، يتم تعريف الـ DB_CHARSET في الملف wp-config.php، وذلك بالتأكد من وجود أو إضافة السطر التالي:

    تسجيل الدخول لعرض الكود

    ملحوظات هامة:

    طريقة تعريف الثابت DB_CHARSET التي أخبرتك عنها في الأعلى ينقصها خطوات، هذه الخطوات أحيانا تكون ضرورية وأحيانا لا نحتاج للتركيز معها، سنوضحها إن شاء الله في رد منفصل.

    المهم الآن أن تجرب عرض الموقع بعد تنفيذ الحل السابق، فإذا ظهرت أي مشاكل غريبة، فافعل التالي:

    1. أحذف الكود الذي أدخلته إلى ملف wp-config.php.
    2. أخبرنا هنا في تعليق لنزودك بخطوات التعريف الكاملة أو تابعها إذا كانت منشورة.
    3. نفذ الحل البديل التالي بشكل مؤقت.

    حل مؤقت بديل لتعريف الثابت DB_CHARSET لتقارير learndash

    الحل المؤقت معتمد على تعريف الثابت DB_CHARSET في ملفات إضافة Learndash نفسها، وهذا يعني أنه حل مؤقت، وبمجرد تحديث الإضافة ستعود نفس المشكلة.

    {تعديل أحد ملفات learndash?}

    الحل المؤقت هو: افتح الملف class-learndash-admin-settings-data-reports.php.

    افتح فودلر الإضافات ثم فولدر sfwd-lms ثم فولدر includes ثم فولدر admin وستجد فيه الملف المطلوب.


    احذف السطر التالي (رقم 140):

    تسجيل الدخول لعرض الكود

    استبدله بالسطر التالي:

    تسجيل الدخول لعرض الكود

    لا تنسى مشاركتنا نتيجة تنفيذ الخطوات عندك.

      يونس محمد

      وعليكم السلام ورحمة الله وبركاته.

      سبب المشكلة كما تفضل الأخ صلاح وهو أن الإضافة تحاول استخدام ثابت لم يتم تعريفه، وهذا الثابت هو DB_CHARSET الذي يعرف عادة في ملف wp-config.php.

      أول خطوة عليك تنفيذها هو الحل الذي ذكره الأخ صلاح، وهو التأكد من وجود السطر التالي الذي يعرف الثابت في ملف [سجل الدخول لترى الرابط]:

      تسجيل الدخول لعرض الكود

      ويجب أن تتأكد أيضًا أن يكون التعريف قبل السطر التالي:

      تسجيل الدخول لعرض الكود

      إذا لم يكن الثابت معرفًا، فعرفه بإدخال سطر التعريف، أما إذا كان معرفًا والمشكلة لا تزال تحدث، فعليك التأكد مما يلي:

      1. تحديث ووردبريس إلى أحدث إصدار.
      2. تعطيل الإضافات الأخرى مؤقتًا، وتنفيذ المهمة التي تريدها، وذلك للتأكد من عدم وجود تعارض.
      3. التأكد من أن إصدار PHP لديك حديث وتدعمه إضافة LearnDash.

        كذلك هناك شيء قد يكون من المفيد معرفته، هل تستخدم استضافة WP Engine؟

        صلاح سلامة وفقًا لتعليمات ووردبريس، يتم تعريف الـ DB_CHARSET في الملف wp-config.php، وذلك بالتأكد من وجود أو إضافة السطر التالي:

        تأكدت من ملف wp-config.php عندي ولاحظت أن السطر المذكور غير موجود فيه. فأضفته وتم حل المشكلة بنجاح 👍️ .

        أشكرك جدًا على مجهودك الواضح، فهمت أمور ما كنت أعرفها من قبل.

        علي ملص تحديث ووردبريس إلى أحدث إصدار.
        تعطيل الإضافات الأخرى مؤقتًا، وتنفيذ المهمة التي تريدها، وذلك للتأكد من عدم وجود تعارض.
        التأكد من أن إصدار PHP لديك حديث وتدعمه إضافة LearnDash.

        شكرا أستاذ علي. تم حل المشكلة بإضافة الكود الذي نصح به الأستاذ صلاح. انا لا استخدم wp engine.

          صلاح سلامة أخبرنا هنا في تعليق لنزودك بخطوات التعريف الكاملة أو تابعها إذا كانت منشورة.

          المشكلة انحلت الحمد لله من ساعتها، ولكن هذا التعليق اثار فضولي عن الطريقة الصحيحة والكاملة لتعريف الثابت DB_CHARSET. تابعت كذا شرح عنه والصراحة عاوز اتأكد ان كل الأمور تمام عندي.

            يونس محمد

            أعتقد أن الأخ صلاح ذكر هذا في إشارة إلى وجود خطوات مطلوبة أحيانًا لتلافي وقوع مشاكل في استرجاع البيانات بشكل صحيح. قد يكون ترميز جداول قاعدة البيانات مختلفًا عن الترميز في الثابت، وقد يكون ترميز البيانات نفسها مختلفًا. في مثل هذه الحالات قد يتوجب عليك تغيير ترميز جداول قاعدة البيانات، و/أو البيانات نفسها.

            إذا لم تكن تعاني من مشاكل في عرض البيانات في موقعك في أي مكان، مثلًا لا تظهر بعض البيانات بطريقة غير مفهومة، فهذا يعني أنه لا توجد مشاكل، لكن إذا أردت التأكد من أن ترميز جداول قاعدة البيانات صحيح، فانتقل إلى PHPMYADMIN واقرأ ما هو موجود في حقل التجميع، فإذا كان يبدأ بـ utf8mb4 فهذا يعني أن الترميز صحيح.

            بالنسبة للبيانات نفسها فإذا كان ترميزها مختلفًا ستظهر بطريقة غير مفهومة عند استدعائها.

            يونس محمد المشكلة انحلت الحمد لله من ساعتها، ولكن هذا التعليق اثار فضولي عن الطريقة الصحيحة والكاملة لتعريف الثابت DB_CHARSET. تابعت كذا شرح عنه والصراحة عاوز اتأكد ان كل الأمور تمام عندي.

            بما أن مشكلتك انحلت بتعريف الـ charset في ملف wp-config.php، فلا يوجد داعي لاستكمال الخطوات إلا إن ظهرت لديك مشاكل في عرض النصوص كظهور علامات استفهام غريبة او نصوص غير مفهومة. لكن إن كنت تريد معرفة كامل الخطوات وتريد تطبيقها فتأكد من أخذ نسخة احتياطية من قاعدة البيانات أولا قبل تنفيذ الخطوات التالية.


            الفكرة: كان ووردبريس يستخدم utf8، ومع الإصدار 4.2 بدأ يعتمد على utf8mb4 بصفته charset أكثر تكاملا من utf8 السابق، ومميزاته أنه يدعم 4 بايت لكل حرف؛ وهذا يعني إمكانية تخزين الرموز التعبيرية والأحرف الخاصة بشكل صحيح؛ مما يجعلها تظهر بشكل صحيح في الواجهة بدلا من ظهورها كعلامات استفهام.

            الهدف:

            • نريد توحيد الـ charset الافتراضي لقاعدة البيانات والجداول إلى utf8mb4.
            • نريد أيضًا توحيد الـ collation الافتراضي لقاعدة البيانات والجداول إلى utf8mb4_unicode_ci أو utf8mb4_unicode_520_ci حسب ما هو مستخدم في موقعك بالفعل وكلاهما رائع حاليًا.

            الخطوات:

            1 - معرفة الـ charset والـ collation الافتراضي الحالي لقاعدة البيانات

            {معرفة الـ charset والـ collation الافتراضي الحالي لقاعدة البيانات?}

            يمكنك استخدام أداة SQL Query Builder المدمجة في [سجل الدخول لترى الرابط]، إذا لم تتمكن من الوصول إلى قاعدة البيانات نفسها حيث التنفيذ من الـphpmyadmin أيسر وأسهل.

            المهم نفذ الكود التالي بالخطوات المشروحة في الصورة السابقة وسيظهر لك كلا من الــ charset وكذلك الـ collation الافتراضي المستخدم حاليًا في قاعدة البيانات عندك.

            تسجيل الدخول لعرض الكود

            النتيجة: اسم قاعدة البيانات هو local، والـ charset الافتراضي لقاعدة البيانات هو utf8 والـ collation الافتراضي لقاعدة البيانات هو utf8_unicode_ci.


            2 - معرفة charset وcollation الجداول نفسها

            تسجيل الدخول لعرض الكود

            استخدم الكود السابق لعرض النتيجة الإجمالية فقط.

            {عرض الـ charset والـ collation المستخدم في الجداول?}

            النتيجة: كما تلاحظ في الصورة السابقة، يظهر لدي 3 اختلافات.


            3 - تحديد الـ collation الافتراضي الصحيح

            بناء على الخطوات السابقة ستتمكن من معرفة أن الـ collation الافتراضي الصحيح في حالة موقعي هو utf8mb4_unicode_520_ci مع الـ charset الصحيح وهو utf8mb4.


            4 - تحويل قاعدة البيانات

            تسجيل الدخول لعرض الكود

            استخدم الكود السابق بنفس الطريقة السابقة مع ضرورة تغيير اسم قاعدة البيانات فيه من Local إلى اسم قاعدة البيانات الخاصة بك.

            {تحويل charset وcollation قاعدة البيانات?}

            النتيجة: يمكنك اعادة استخدام أول كود للتأكد من أن كلا من الـ charset والـ collation لقاعدة البيانت قد تم تصحيحه.


            5 - تحويل الجداول

            تسجيل الدخول لعرض الكود

            لاحظ: ضرورة تغيير utf8mb4_unicode_520_ci بالـ collation الذي اخترته انت في الخطوة رقم 3.

            الكود السابق يعرض لك الجداول التي يجب تحويلها فقط، ويضع كل جدول في سطر منفرد. كما تلاحظ في الصورة التالية أن لدى 13 جدول يجب أن نحولهم للـ charset والـ collation الجديد.

            والخطوات هي نسخ الأسطر الـ 13 الناتجة (دفعة واحدة أو سطر سطر) وتنفيذها بنفس الطريقة.


            6 - جرب الموقع

            بعد توحيد الـ charset والـ collation، امسح الكاش وجرب أكثر من صفحة في موقعك للتأكد أن كل شيء تمام وأنه لا تظهر أي مشاكل في عرض النصوص.