פרק 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
ברור למדי שבמקרה זה, ה 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. קוד
כמו שסבתא נהגה להכין
|