logo


פרק 4: HTML בחטף ותבניות (Templates) רשת

המתווך שלנו: CGI.pm

ברוב תחומי החיים אנו מעונינים לסלק את המתווך, אבל במקרה שלנו נקבל בברכה את המודול CGI.pm של Perl. כבר השתמשנו בעבר בצדדים שונים של מודל ה CGI. למשל בפרק השלישי בו השתמשנו במודל ה CGI ליצירת טפסים.

למעשה, CGI.pm , מספק שיטות ליצירת פלט HTML מבלי לפלוט HTML מפורש. השאלה איזה מהשיטות עדיפה היינה לגיטימית, אבל בכדי להכריע בסוגיה צריך קודם להכיר אותם.

נתחיל בדוגמא פשוטה, נניח שאנו מעונינים להתחיל עמודHTML. במקום ללכת מסביב עם תוויות כמו <HTML> ו<HEAD> , נוכל לסמוך על שיטות של CGI.pm שיעשו עבורנו את העבודה:

#!/usr/local/bin/perl
use CGI;
$cgiobject=new CGI;
$cgiobject->use_named_parameters;
print $cgiobject->header;
#begin HTML page
print $cgiobject->
      start_html(-title=>"Shiny Modern Web Page",
                 -BGCOLOR=>"white");

אחרי שיצרנו מופע של אובייקט ה CGI נקרא ל use_named_parameters , אשר בסך הכל מקלה על כינוי הפרמטרים ביצירת אלמנטים של HTML (נראה זאת בעוד רגע). אנו מספקים את מתודת ה CGI start_html ביחד עם שני פרמטרים: title ו BGCOLOR. שימו לב לתחביר: כל פרמטר מתחיל במקף, ואנו מקצים לו את ערכו בעזרת הסימן <=. אם תשכחו את ה < שבא עם סימן השווה סקריפט ה Perl יכשל. זוהי עוד אחת מהטעויות הנפוצות.

לסיכום, קריאה בודדת ל start_html יוצרת פלט השווה לקוד ה HTML הבא:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<HTML><HEAD><TITLE>Shiny Modern Web Page</TITLE>
</HEAD><BODY BGCOLOR="white">

בסופו של דבר שיטת ה CGI.pm מציעה דרך פשוטה יותר לבטא תוכן ב HTML בלי לכתוב את כל הקוד. ישנם פקודות עבור רוב התוויות ב HTML2 ו HTML3, שמכסות את רוב הדברים שבהם תצטרכו להשתמש. לזכור את כל הפקודות זה כמעט בלתי אפשרי, כך שתוכל להעזר ב CGI.pm HTML shortcuts Reference לרשימה מלאה.

כמו כן ראינו בפרק השלישי של סדרה זו איך פקודות אלו יכולות לשמש ליצירת שדות טופס אשר בHTML נקי היו עלולים להראות מסובכים למדי. נבחן סדרה של תיבות סימון, ונשווה בין כתיבת קוד ב HTML מול מתודת checkbox_group של CGI.pm.

print $cgiobject->
    checkbox_group(-name=>'hobbies',
                   -values=>['reading','writing','music',
                             'sports','juggling','pottery',
                             'cooking','fishing','nagging',
                             'cat breeding','stargazing',
                             'navelgazing'],
                   -linebreak=>'false',
                   -columns=>4);
print <<EOF
<TABLE>
<TR><TD>
<INPUT TYPE="checkbox" 
	NAME="hobbies" 
	VALUE="reading">reading<BR></TD>
<TD><INPUT TYPE="checkbox" 
	NAME="hobbies" 
	VALUE="sports">sports<BR></TD>
<TD><INPUT TYPE="checkbox" 
	NAME="hobbies" 
	VALUE="cooking">cooking<BR></TD>
<TD><INPUT TYPE="checkbox" 
	NAME="hobbies" 
	VALUE="cat breeding">cat breeding<BR></TD>
</TR>
<TR><TD><INPUT TYPE="checkbox" 
	NAME="hobbies" 
	VALUE="writing">writing<BR></TD>
<TD><INPUT TYPE="checkbox" 
	NAME="hobbies" 
	VALUE="juggling">juggling<BR></TD>
<TD><INPUT TYPE="checkbox" 
	NAME="hobbies" 
	VALUE="fishing">fishing<BR></TD>
<TD><INPUT TYPE="checkbox" 
	NAME="hobbies" 
	VALUE="stargazing">stargazing<BR></TD>
</TR><TR><TD><INPUT TYPE="checkbox" 
	NAME="hobbies" 
	VALUE="music">music<BR></TD>
<TD><INPUT TYPE="checkbox" 
	NAME="hobbies" 
	VALUE="pottery">pottery<BR></TD>
<TD><INPUT TYPE="checkbox" 
	NAME="hobbies" 
	VALUE="nagging">nagging<BR></TD>
<TD><INPUT TYPE="checkbox" 
	NAME="hobbies" 
	VALUE="navelgazing">navelgazing<BR></TD>
</TR></TABLE>
EOF

 

והתוצאה
reading sports cooking cat breeding
writing juggling fishing stargazing
music pottery nagging navelgazing

ברור למדי שבמקרה זה, ה CGI.pm היא דרך מועדפת ליצירת תוכן HTML היא קלה לקריאה, לעריכה, ולניקוי משגיאות, ומצריכה פחות הקלדה. חשוב לציין, יצירה של HTML בעזרת CGI.pm היא לא תמיד כל כך שימושית. רבים מהתוויות של HTML הם זוגות של תוויות פשוטות, כלומר הם סוגרים ופותחים סביב חתיכת מידע, כמו התווית <H3> עבור כותרת מסדר שלישי. ההבדלים בקוד בין הגישות של CGI.pm ו HTML נקי, זעירים למדי:

print $cgiobject->h3("Read all about it.");

מול

print "<H3>Read all about it</H3>";

אתם חופשיים להשתמש ב CGI.pm ליצירת חלקים מסובכים של HTML ולחיבורם עם HTML נקי שיכתב עבור החלקים הקלים. עבור מישהו שמכיר HTML, כתיבת פסקה פשוטה מאפס תהיה לא יותר ולא פחות עבודה מללמוד פקודות של CGI.pm.

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

קוד כמו שסבתא נהגה להכין
תוכן עניינים
זרימת מידע: או בואו נתעלל קצת במסמך

אודות
תוכן עניינים
פרק 1: ה Perl שאתם צריכים לדעת
פרק 2: קישור Perl לעמודי הרשת
פרק 3: שמירת מצב
פרק 4: HTML בחטף ותבניות (Templates) רשת
קוד כמו שסבתא נהגה להכין  
המתווך שלנו: CGI.pm  
זרימת מידע או בואו נתעלל קצת במסמך  
בואו נתעלל קצת במסמך: בניית הפיצריה פוגשת את Smallville Gazzette  
סיכום  
פרק 5: עיבוד וניתוח של עמודי רשת
פרק 6: להשתעשע עם בסיסי נתונים מקוונים:אקסס
פרק 7: המודל MySQL
פרק 8: להשתעשע בבסיסי נתונים - GUFE - החזית הכללית והשימושית
פרק 9: המילניום - ניהול זמן ותאריך
פרק 10: ניהול רשימות והאשים (Hashs)
פרק 11: הפניה להפניה
פרק 12: הכרות עם mod_perl