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

السؤال

نشر

السلام عليكم،
موقعي مبني باستخدام php laravel livewire 
هو موقع للاختبارات هناك بعض الاسئلة من نوع الاختيار من متعدد الموقع يعمل كما هو متوقع على اللوكلهوست بينما عندما رفعت الاكواد على الاستضافة عند تقديم الطالب للاختبار لا يتم اختيار الاجابة ولا حفظها في الذاكرة المؤقتة مع انه على اللوكلهوست يعمل بشكل سليم من أي خطأ كهذا ،
لا تظهر لي أي اخطاء ايضا عند القيام بالاختبار على على الموقع المرفوع على الاستضافة هذه هيك الاكواد سأزودكم بها 
 

 @case('multiple_choice')
                    @php
                        $shuffledOptions = $question->options->shuffle();
                        $key = $currentQuestion . '-' . $currentGroup;
                        $selectedOptions = isset($selectedAnswers[$key]) ? $selectedAnswers[$key] : [];
                        $correctOptions = $question->options
                            ->where('is_correct', true)
                            ->pluck('id')
                            ->toArray();
                        $areAllCorrect = count(array_intersect($selectedOptions, $correctOptions)) === count($correctOptions);
                    @endphp
                    <ul class="px-8" id="options-list">
                        {{-- Previous answer --}}
                        @if (isset($answers[$key]))
                            @if (array_key_exists($key, $answers))
                                <h1>Your previous answer</h1>
                                @php
                                    $answer = $question->options->firstWhere('id', $answers[$key]);
                                @endphp
                                <li
                                    class="my-2 w-full p-4 font-bold text-lg border rounded-lg dark:text-white/60 dark:font-semibold text-[#523b92] dark:border-white hover:text-white bg-red-400">
                                    {{ $answer->option_text }}
                                </li>
                                <hr class="h-2 bg-slate-400">
                            @endif
                        @endif
                        @foreach ($shuffledOptions as $option)
                            <li class="my-2 cursor-pointer w-full p-4 font-bold text-lg border rounded-lg dark:text-white/60 dark:font-semibold text-[#523b92] dark:border-white border-[#523b92] hover:text-white hover:bg-[#523b92]"
                                wire:click="toggleAnswer('{{ $option->id }}')">
                                {{ $option->option_text }}

                                @if (in_array($option->id, $selectedOptions))
                                    <div class="text-green-900">Selected</div>
                                @endif
                                <div wire:loading wire:target="toggleAnswer('{{ $option->id }}')" role="status">
                                    <svg aria-hidden="true"
                                        class="ml-2 w-8 h-8 mr-2 text-gray-200 animate-spin dark:text-gray-600 fill-blue-600"
                                        viewBox="0 0 100 101" fill="none" xmlns="http://www.w3.org/2000/svg">
                                        <!-- ... رمز التحميل ... -->
                                        <path
                                            d="M100 50.5908C100 78.2051 77.6142 100.591 50 100.591C22.3858 100.591 0 78.2051 0 50.5908C0 22.9766 22.3858 0.59082 50 0.59082C77.6142 0.59082 100 22.9766 100 50.5908ZM9.08144 50.5908C9.08144 73.1895 27.4013 91.5094 50 91.5094C72.5987 91.5094 90.9186 73.1895 90.9186 50.5908C90.9186 27.9921 72.5987 9.67226 50 9.67226C27.4013 9.67226 9.08144 27.9921 9.08144 50.5908Z"
                                            fill="currentColor" />
                                        <path
                                            d="M93.9676 39.0409C96.393 38.4038 97.8624 35.9116 97.0079 33.5539C95.2932 28.8227 92.871 24.3692 89.8167 20.348C85.8452 15.1192 80.8826 10.7238 75.2124 7.41289C69.5422 4.10194 63.2754 1.94025 56.7698 1.05124C51.7666 0.367541 46.6976 0.446843 41.7345 1.27873C39.2613 1.69328 37.813 4.19778 38.4501 6.62326C39.0873 9.04874 41.5694 10.4717 44.0505 10.1071C47.8511 9.54855 51.7191 9.52689 55.5402 10.0491C60.8642 10.7766 65.9928 12.5457 70.6331 15.2552C75.2735 17.9648 79.3347 21.5619 82.5849 25.841C84.9175 28.9121 86.7997 32.2913 88.1811 35.8758C89.083 38.2158 91.5421 39.6781 93.9676 39.0409Z"
                                            fill="currentFill" />
                                    </svg>
                                </div>
                            </li>
                        @endforeach
                    </ul>
                @break

الكود الخاص بامكانية الاختيار 
 

   public function toggleAnswer($answer)
    {
       
        $key = $this->currentQuestion . "-" . $this->currentGroup;
    
        if (!isset($this->selectedAnswers[$key])) {
            $this->selectedAnswers[$key] = [];
        }
    
        if (in_array($answer, $this->selectedAnswers[$key])) {
            // إذا كانت الإجابة محددة، قم بإزالتها
            $this->selectedAnswers[$key] = array_diff($this->selectedAnswers[$key], [$answer]);
        } else {
            // إذا كانت الإجابة غير محددة، قم بتحديد الإجابة
            $this->selectedAnswers[$key][] = $answer;
    
            // إذا كان هناك اختياران صحيحان فقط، قم بإزالة الاختيار الأقدم
            if (count($this->selectedAnswers[$key]) > 2) {
                array_shift($this->selectedAnswers[$key]);
            }
        }
    }

الكود سليم ويعمل على اللوكلهوست كما قلت لكن لا يتم الاختيار وحفظ الاجابة عند اختباره على الموقع المرفوع على الاستضافة اريد معرفة الاسباب.

Recommended Posts

  • 0
نشر

يرجح أن تكون المشكلة متعلقة بإعداد الرابط الجذر Base url لموقعك على الاستضافة، اذ أن livewire تستعمل هذا الإعداد غالبا للتعامل مع طلبيات أجاكس، والتي تستعمل في أحداث مثل wire:click.

افتحي console التطبيق بعد استهداف حدث الضغط على الزر مثلا وانظري تفاصيل المشكلة التي تحدث.

كحل للمشكلة يقترح اتباع التالي:

افتحي ملف env. وقومي بوضع الرابط الجذر لموقعك في APP_URL:

APP_URL=https://domain.co/

احفظي الملف، وقومي بتشغيل الأمر php artisan cache:clear لمحو التخزين المؤقت للملفات.

في حال ما كان لديك وصول ssh إلى الاستضافة أو إلى تارمنل الاستضافة يمكنك تشغيلها بشكل مباشر عن طريق التصفح إلى مجلد المشروع، أما في حالة التعذر يمكنك استخدام الواجهة Artisan لتشغيل أوامر artisan في داخل التطبيق:

نعرف مسارا جديد بملف web.php:

use Artisan;

..
Route::get('/clear-cache', function(){
     Artisan::call('cache:clear');
});

ثم قومي بالتصفح إلى /https://domain.co/clear-cache

  • 0
نشر

هل يظهر لك أية أخطاء في الكونسول، وأيضًا من المفيد حذف الملفات والإعدادات المؤقتة من خلال الأمر التالي:

php artisan optimize:clear

وعليك التحقق من ملفات السجلات (logs) على الخادم الاستضافة للبحث عن أي أخطاء، ويمكنك العثور على ملف السجلات في مجلد storage/logs في مشروع Laravel.

تأكدي أيضًأ من أن الاستضافة تدعم Laravel وLivewire وأن الإعدادات مثل إصدار PHP والامتدادات اللازمة مكونة بشكل صحيح.

ثم التحقق من تثبيت جميع الاعتماديات (dependencies) على الخادم الاستضافة باستخدام Composer وتنفيذ الأمر الأمر التالي:

composer install

ملف env  تحققي منه على الاستضافة وتأكدي  من أن جميع الإعدادات المطلوبة مثل قاعدة البيانات وإعدادات Livewire مكونة بشكل صحيح.

وتستطيعي تفعيل وسائط التصحيح في Livewire عن طريق تعيين debug إلى true في ملف .env:

LIVWIRE_DEBUG=true

 

  • 0
نشر
بتاريخ 1 ساعة قال Adnane Kadri:

يرجح أن تكون المشكلة متعلقة بإعداد الرابط الجذر Base url لموقعك على الاستضافة، اذ أن livewire تستعمل هذا الإعداد غالبا للتعامل مع طلبيات أجاكس، والتي تستعمل في أحداث مثل wire:click.

افتحي console التطبيق بعد استهداف حدث الضغط على الزر مثلا وانظري تفاصيل المشكلة التي تحدث.

كحل للمشكلة يقترح اتباع التالي:

افتحي ملف env. وقومي بوضع الرابط الجذر لموقعك في APP_URL:

APP_URL=https://domain.co/

احفظي الملف، وقومي بتشغيل الأمر php artisan cache:clear لمحو التخزين المؤقت للملفات.

في حال ما كان لديك وصول ssh إلى الاستضافة أو إلى تارمنل الاستضافة يمكنك تشغيلها بشكل مباشر عن طريق التصفح إلى مجلد المشروع، أما في حالة التعذر يمكنك استخدام الواجهة Artisan لتشغيل أوامر artisan في داخل التطبيق:

نعرف مسارا جديد بملف web.php:

use Artisan;

..
Route::get('/clear-cache', function(){
     Artisan::call('cache:clear');
});

ثم قومي بالتصفح إلى /https://domain.co/clear-cache

وقت اتصفح بالرابط اللي قلت لي عنه اخر شي تظهر صفحة بيضاء طبيعي ؟؟
ولم تحل المشكلة ما زالت ظهر لي خطأ في الكونسول هكذا :
Uncaught ReferenceError: hljs is not defined
    at go.min.js:14:2
    at go.min.js:14:33

بتاريخ منذ ساعة مضت قال Mustafa Suleiman:

هل يظهر لك أية أخطاء في الكونسول، وأيضًا من المفيد حذف الملفات والإعدادات المؤقتة من خلال الأمر التالي:

php artisan optimize:clear

وعليك التحقق من ملفات السجلات (logs) على الخادم الاستضافة للبحث عن أي أخطاء، ويمكنك العثور على ملف السجلات في مجلد storage/logs في مشروع Laravel.

تأكدي أيضًأ من أن الاستضافة تدعم Laravel وLivewire وأن الإعدادات مثل إصدار PHP والامتدادات اللازمة مكونة بشكل صحيح.

ثم التحقق من تثبيت جميع الاعتماديات (dependencies) على الخادم الاستضافة باستخدام Composer وتنفيذ الأمر الأمر التالي:

composer install

ملف env  تحققي منه على الاستضافة وتأكدي  من أن جميع الإعدادات المطلوبة مثل قاعدة البيانات وإعدادات Livewire مكونة بشكل صحيح.

وتستطيعي تفعيل وسائط التصحيح في Livewire عن طريق تعيين debug إلى true في ملف .env:

LIVWIRE_DEBUG=true

 

ظهر لي الخطأ هذا في الكونسول 
 

اقتباس

Uncaught ReferenceError: hljs is not defined
    at go.min.js:14:2
    at go.min.js:14:33

 

  • 0
نشر
بتاريخ الآن قال هبة بطاينة:

وقت اتصفح بالرابط اللي قلت لي عنه اخر شي تظهر صفحة بيضاء طبيعي ؟؟
ولم تحل المشكلة ما زالت ظهر لي خطأ في الكونسول هكذا :
Uncaught ReferenceError: hljs is not defined
    at go.min.js:14:2
    at go.min.js:14:33

ظهر لي الخطأ هذا في الكونسول 

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

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...