back

Knowledge Centre

تحسين تجربة المستخدم: تخصيص صفحات الخطأ في Drupal

| 02.04.2018

تحسين تجربة المستخدم: تخصيص صفحات الأخطاء في Drupal

401، 403، و 404 - لقد واجهنا جميعًا هذه الأكواد الخاصة بحالة HTTP أثناء استكشافنا للشبكة العالمية على الأقل مرة واحدة في حياتنا. كيف تشعر عندما تظهر هذه الصفحات الخاطئة بدلاً من ما تبحث عنه؟

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

بينما تأتي صفحات الخطأ مضمنة بشكل افتراضي عند بناء موقع ويب، السؤال الحقيقي هو: هل يجب أن نتركها بسيطة وغير مزينة، أم يجب أن نحاول جعل تجربة المستخدم معها أكثر تفاعلية؟

خلال DrupalCamp London، اكتشفت أن العديد من المطورين يواجهون تحدي إنشاء وتخصيص هذه الصفحات. كل شيء يبدأ بالمصممين الذين يحاولون جعل كل شيء جذاب وغير مجهد. ثم، يعمل المطورون على تخصيص وإحياء هذه التصميمات.

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

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

كيفية تخصيص صفحات الخطأ في Drupal

دعونا ننظر في الطرق المختلفة المتاحة:

نهج Drupal 7

في Drupal 7، لديك نهجين رئيسيين:

استخدام القالب الخاطئ العام:

// page--error.tpl.php
<div class="error-page">
 <?php if ($messages): ?>
   <div class="messages">
     <?php print $messages; ?>
   </div>
 <?php endif; ?>
 
 <div class="error-content">
   <?php print render($page['content']); ?>
 </div>
</div>

2. إنشاء قوالب محددة لكل نوع خطأ باستخدام خطاف في السمة الخاصة بك:

// template.php
function YOURTHEME_preprocess_page(&$variables) {
 // Get the current HTTP status code
 $status = drupal_get_http_header("status");
 
 if ($status == "404 Not Found") {
   // Create template suggestion for 404
   $variables['theme_hook_suggestions'][] = 'page__404';
 }
 elseif ($status == "403 Forbidden") {
   // Create template suggestion for 403
   $variables['theme_hook_suggestions'][] = 'page__403';
 }
 elseif ($status == "401 Unauthorized") {
   // Create template suggestion for 401
   $variables['theme_hook_suggestions'][] = 'page__401';
 }
}

ثم إنشاء ملفات القالب المحددة:

// page--404.tpl.php
<div class="error-404">
 <h1>Page Not Found</h1>
 <p>Sorry, but the page you were looking for could not be found.</p>
 <?php print theme('search_block_form'); // Optional: Add a search form ?>
</div>
// page--403.tpl.php
<div class="error-403">
 <h1>Access Denied</h1>
 <p>You don't have permission to access this page.</p>
 <?php if (!$logged_in): ?>
   <?php print drupal_render(drupal_get_form('user_login_block')); ?>
 <?php endif; ?>
</div>

يمكنك بعد ذلك تصميم هذه القوالب باستخدام CSS للسمة الخاصة بك:

.error-404, .error-403 {
 text-align: center;
 padding: 50px 20px;
 max-width: 600px;
 margin: 0 auto;
}
.error-404 h1, .error-403 h1 {
 font-size: 48px;
 color: #e74c3c;
 margin-bottom: 20px;
}
.error-404 p, .error-403 p {
 font-size: 18px;
 line-height: 1.6;
 color: #555;
}

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

تذكر أن تمسح ذاكرة التخزين المؤقت لسجل السمة بعد إضافة ملفات القالب الجديدة حتى يتعرف Drupal عليها في bash

drush cc all

 

404
Top
white-paper

النهج في Drupal 8+

بالنسبة لـ Drupal 8 وما فوق، التنفيذ مختلف وأكثر تنظيمًا. إليك كيفية القيام بذلك:

1. أولاً، قم بإنشاء اقتراح للمظهر في ملف THEMENAME.theme الخاص بك:

/**
* ينفذ hook_theme_suggestions_page_alter().
*/
function THEMENAME_theme_suggestions_page_alter(array &$suggestions, array $variables) {
 $route_name = \Drupal::routeMatch()->getRouteName();
 
 if ($route_name == 'system.403') {
   $suggestions[] = 'page__403';
 }
 if ($route_name == 'system.404') {
   $suggestions[] = 'page__404';
 }
}

2. قم بإنشاء قوالب Twig الخاصة بك لصفحات الخطأ:

{# page--404.html.twig #}
{% extends "page.html.twig" %}
{% block content %}
 <div class="error-page error-404">
   <h1>{{ 'الصفحة غير موجودة'|t }}</h1>
   <div class="error-message">
     <p>{{ 'الصفحة المطلوبة غير موجودة.'|t }}</p>
   </div>
   {% if search_form %}
     <div class="search-block">
       {{ search_form }}
     </div>
   {% endif %}
 </div>
{% endblock %}
{# page--403.html.twig #}
{% extends "page.html.twig" %}
{% block content %}
 <div class="error-page error-403">
   <h1>{{ 'تم رفض الوصول'|t }}</h1>
   <div class="error-message">
     <p>{{ 'ليس لديك الإذن للوصول إلى هذه الصفحة.'|t }}</p>
   </div>
   {% if not logged_in %}
     <div class="login-block">
       {{ drupal_block('user_login_block') }}
     </div>
   {% endif %}
 </div>
{% endblock %}

أضف تنسيق CSS الخاص بك:


/* error-pages.css */
.error-page {
 text-align: center;
 padding: 4rem 2rem;
 max-width: 800px;
 margin: 0 auto;
}
.error-page h1 {
 font-size: 3rem;
 color: #e74c3c;
 margin-bottom: 1.5rem;
}
.error-message {
 font-size: 1.2rem;
 line-height: 1.6;
 color: #555;
 margin-bottom: 2rem;
}
.search-block,
.login-block {
 max-width: 400px;
 margin: 2rem auto;
 padding: 1rem;
 background: #f8f9fa;
 border-radius: 4px;
}

للتخصيص المتقدم أكثر، يمكنك أيضًا إنشاء تحكم مخصص:

// src/Controller/CustomErrorController.php
namespace Drupal\your_module\Controller;
use Drupal\Core\Controller\ControllerBase;
use Symfony\Component\HttpFoundation\Response;
class CustomErrorController extends ControllerBase {
 public function error404() {
   $build = [
     '#theme' => 'error_404',
     '#search_form' => \Drupal::formBuilder()->getForm('Drupal\search\Form\SearchBlockForm'),
   ];
   
   return $build;
 }
 public function error403() {
   $build = [
     '#theme' => 'error_403',
     '#login_form' => \Drupal::formBuilder()->getForm('Drupal\user\Form\UserLoginForm'),
   ];
   
   return $build;
 }
}

لا تنسى مسح الذاكرة المؤقتة بعد إجراء هذه التغييرات:

drush cr 

تذكر هذه النقاط المهمة:
- دائمًا اختبر صفحات الخطأ الخاصة بك في بيئة التطوير أولاً
- تأكد من أن صفحات الخطأ الخاصة بك تحافظ على العلامة التجارية لموقعك
- تضمين خيارات التنقل المفيدة
- النظر في إضافة وظيفة البحث
- اجعل رسالة الخطأ واضحة ولكنها ودية
- توفير خطوات واضحة للمستخدمين

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

Background color
white-paper

أنا متأكد أنه قد يكون هناك طرق أخرى للقيام بذلك، ولكن هذه هي الطرق التي أستخدمها عادة وحتى الآن، لم تخذلني أبدا.

فما هو الطريقة المفضلة لديك لتخصيص صفحة الخطأ؟

Background color
white-paper
  • المعرفة
    مركز المعرفة
    داخل عقل الذكاء الصناعي
  • المعرفة
    مركز المعرفة
    تنعيم LLaMA لإعادة إنشاء أسلوب إمينيسكو الأدبي
  • المعرفة
    مركز المعرفة
    تبدأ عهدًا جديدًا: إطلاق نظام إدارة المحتوى دروبال 1.0