View Single Post
ישן 23-07-10, 16:07   # 1
Gal Shafrir
חבר וותיק
 
מיני פרופיל
תאריך הצטרפות: Oct 2005
הודעות: 1,626

Gal Shafrir לא מחובר  

Wink PHP וSQL - מערכת רב-לשונית

אהלן, חבר'ה.

בימים אלו אני שוקד על פיתוח מערכת CMS מודולרית,
שמכילה חלק מהמודולים הבאים:
  • עמודים
  • חדשות/כתבות/מאמרים
  • גלריות
  • טפסים
  • בלוקים
  • וכו'.

הבעיה שלי היא כזו:
אני צריך לפתח מודול נוסף: מודול שפות.
באמצעות המודול ניתן יהיה לתרגם את האתר למספר שפות בלתי מוגבל,
בעוד שהשפות נשלפות מתוך טבלה במסד, לצורך העניין.

הבעיה שלי היא בתכנון המסד. אני רוצה לתכנן את המסד כך שאוכל
להחליף שפת ברירת מחדל ללא שום בעיות, ואוכל לתרגם את התוכן שלי,
לא משנה באיזה מודול, בקלות וביעילות.

הציעו לי לעשות טבלה מקשרת בין תרגום לבין פריט במודול:
parentID - הפריט שרוצים לתרגם
itemID - הפריט המתורגם (להלן: התרגום עצמו)
module - כמובן, לאיזה מודול שייך התרגום (עמודים/מאמרים/...)
lang - קוד השפה (he/en וכו')

הבעיה היא מה קורה כאשר משנים את שפת ברירת המחדל?
צריך לעבור על כל הטבלאות של כל המודולים (לטפסים למשל יש יותר מטבלה אחת),
כדי לשנות את הparentID...
לכן הפתרון הזה נראה לי לא בדיוק יעיל.


פתרון נוסף: בסגנון וורדפרס, היא רשומה אחת ריקה,
שלא מכילה תוכן, ושאר התרגומים לאותו הפריט נכנסים כרשומות נוספות
כאשר הגדרות הפריט עצמו לא מופיעות ונלקחות מפריט האב.

דוגמה לשליפת כל העמודים בשפה מסוימת:
PHP קוד:
    public function get_all($lang '')
    {
        
$sql "SELECT `translations`.`itemID`, `pages`.*
        FROM `pages`, `translations`
        WHERE `translations`.`parentID` = `pages`.`ID` AND `translations`.`lang`='{$lang}'
        AND `translations`.`module` = 'pages'"
;
        
        
$query $this->db->query($sql);
        
        
$pages $query->result_array();
        
        if (
count($pages) > 0)
        {
            foreach (
$pages as $key => $page)
            {
                
$sql "SELECT * FROM `pages` WHERE `ID` = '{$page['itemID']}'";
                
$q $this->db->query($sql);
                
                
$r $q->result_array();

                
$pages[$key]['name'] = $r[0]['name'];
                
$pages[$key]['content'] = $r[0]['content'];
                
$pages[$key]['title'] = $r[0]['title'];
            }
        }

        
/*$this->db->order_by('homepage', 'desc');
        $this->db->order_by('order', 'asc');    
        $query = $this->db->get('pages');*/
        
        
return $pages;
    } 
הקוד לדעתי לא יעיל, ועליי למצוא פתרון יותר יעיל מזה.

פתרון נוסף:
לשייך לכל מודול 2 טבלאות: אחת לתכנים ואחת לכל שאר הדברים
שצריך לשמור לגבי אותו הפריט (סטטוס, כתובת וכו').

אשמח לעזרה בנושא, זו פעם ראשונה שאני עושה דבר כזה.

תודה לעוזרים,
גל.
__________________
בברכה,
גל שפריר - מעצב ומפתח אתרים.

עופר שפריר - במאי, תסריטאי ומפיק.
  Reply With Quote