פרק 3: שמירת מצבבניית פיצריה :לקיחת הזמנהsub build_order() #build the pizza order { unless ($newOrderFlag) { $greeting="Welcome! Please begin building your pizza order." } else { $greeting="<H3>Build-a-Pizza</H3>". "You may modify or finalize ". "your order below." } $greeting.="<br>Current pizza price: <font color='red'>\$". sprintf("%.2f",&calcTotal())."</font>."; print $cgiobject->header; print $cgiobject-> start_html(-title=>'Build-a-Pizza',-bgcolor=>'white'); print "<H2>$greeting</H2>"; &output_form; print $cgiobject->end_html; } השגרה build_order שולטת במראה טופס ההזמנה, ולכן היא אחראית להצגה של התקדמות ההזמנה. ראשית, היא בודקת האם אנו בונים הזמנה חדשה או שזה עדכון של הזמנה קיימת וזאת דרך המשתנה newOrderFlag$. למעשה, נראה בהמשך שדגל זה קשור למעשה לשדה טופס נסתר השתול בעמוד הפלט. שדה הטופס הנסתר היא בסה"כ דרך לאחסון ערך בעמוד, כך שהערך יוחזר לסקריפט כאשר העמוד נטען. שדות טופס נסתרים הם דרך נוחה "לזיוף" של זיכרון ברשת- ממש כמו רישום מספר טלפון על נייר וחיוג את המספר בעתיד ע"י התבוננות על נייר זה בלי צורך לזכור אותו. בישום שלנו, כאשר ה CGI מאתר שהזמנה חדשה התקבלה, שדה הטופס הנסתר newOrderFlag עדין לא הושתל בעמוד (הואיל ושום פרמטרים לא התקבלו). אולם, ברגע שה CGI יקבל עדכון (פרמטרים ישלחו), המשתנה newOrderFlag ישתל כדי לציין שזו אינה הזמנה חדשה. אם נחזור ל bulid_order, תופיע הודעת פתיחה מתאימה ולאחריה המחיר המדויק, שחושב ע"י השגרה calcTotal. אנו משתמשים בפונקצית הפלט המעוצבת ()sprintf כדי להעביר את המחיר לצורה של שבר עשרוני דו ספרתי, פשוט כדי למנוע תוצאות כגון "$10.5" במקום "$10.50". bulid_order קורא לשגרה output_form שתעשה את רוב העבודה בבניית התוכן של עמוד האינטרנט. sub init() #define initial values for pizza parameters { $name="Your name"; $address="Where to?"; $phone="Your phone"; $deliver="deliver"; $toppings="pepperoni"; $size="large"; } במקרה של הזמנה חדשה, השגרה init מגדירה את ערכי ברירת המחדל עבור המשתנים שמגדירים את המצבים של שדות הטופס השונים. sub get_state_variables() #grab any parameters which were submitted { $name=$cgiobject->param("order_name"); $address=$cgiobject->param("order_address"); $phone=$cgiobject->param("order_phone"); $deliver=$cgiobject->param("order_deliver"); $toppings=$cgiobject->param("order_toppings"); $size=$cgiobject->param("order_size"); $newOrderFlag=$cgiobject->param("newOrderFlag"); $orderComplete=$cgiobject->param("finish") } במקרה של עדכון ההזמנה, השגרה get_state_variables מפעילה את השיטה param של אוביקט ה CGI כדי לקבל את הערך של כל שדה טופס ולהקצות ערכים אלו למשתני Perl המתאימים. שמירת מצב חד פעמית או
תסריט בניית הפיצריה
|