ונניח שהחלטנו לעבוד לפי השיטה שהצעתי לעיל, אנחנו מאבדים מיד את היתרון היחסי של וורדפרס שמאפשר בהינף מקלדת לבחור תבנית פר עמוד – בעזרת קומנט קצר בראש העמוד, ואז שיוך ברובריקה של מאפייני העמוד לתבנית החדשה. מאבדים את זה משום שכשרוצים את היתרון המדובר, חייבים להוסיף קובץ נוסף בתיקיית ה-root, בין אם עם תחילית page ובין עם בלי – דבר ש"אסרנו". מה אם כן עושים?

הפתרון שאני מציע:
ב-index.php מוסיפים את הקוד הזה:

if (is_page()) {
    global $home;
    $home = is_home() || is_front_page();

    global $slug;
    $slug = $post->post_name;

    if ($home) {
// something
    }

    get_template_part(CONTROLLERS . 'pages/page');
}

ובקובץ page.php תחת הספריה של הקונטרולרים מגדירים קודם כל את המשתנים הגלובליים ואז:

global $home;
global $slug;

if ($home) {
            get_template_part(CONTROLLERS . 'pages/home');           
        } else {
$template=locate_template(CONTROLLERS . 'pages/'.$slug.'.php'); 
if($template) 
get_template_part(CONTROLLERS . 'pages/'.$slug);
 else { // whatever you want in the default page } }

בצורה זו:

  • נזהה מתי מדובר בעמוד הבית כדי לתת לו טמפלייט משלו
  • ניתן טמפלייט דיפולטיבי לעמוד תחת page.php
  • נוכל להקדיש לעמוד טמפלייט מיוחד במידה ונייצר תבנית כשם הסלאג של העמוד

מדובר כאן אם כן בתחליף למנגנון הדיפולטיבי של וורדפרס. הדבר היחיד שצריך להקפיד הוא שאנו קוראים לקבצים בשמות בעלי משמעות. החסרון הוא שאי אפשר בבת אחת להחיל טמפלייט אחד על מספר עמודים, אבל כמובן שגם על זה אפשר להתגבר בעזרת תנאי if פשוט (כמו לדוגמה, לקרוא לכל העמוד בסלאג עם מילה ראשונה דומה, ואז לעשות explode לשם העמוד ולהפנות לתבנית בשם המילה הראשונה). ראוי לציין: הסיבה שהפרדתי את ה-home משאר העמודים היא כדי לאפשר לגשת אליו גם בעזרת ההגדרה front page שאני לא יודע בדיוק אם יש לה משמעות בפריימוורק MVC שעכשיו הגדרתי, אבל שיהיה.

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *