ארכיטקטורת וורדפרס

מבוא

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

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

הלקוח

הלקוח נטען כאשר המשתמש בוחר את כתובת הווב של האתר. הלקוח יוזם קריאה אל האתר ומוריד ממנו את הקבצים השונים של האפליקציה. כדי לראות מה נטען אצלנו, נשתמש ב inspect (קליק ימני על התוכן או ctrl-shift-I). בטאב sources נראה את כל הספרית השרת שנטענה. הנחיה מה לטעון מתקבל מהשרת בקבצי ה PHP.

הלקוח בנוי משתי שפות.

HTML – מגדיר את מבנה הדף באמצעות טאגים. למשל <table> מגדיר טבלה, <button> מגדיר כפתור פעולה וכו'. הטאגים בדרך כלל נסגרים בטאג תואם. </table> יסגור את הטבלה. המבנה הוא כמובן היררכי. בתוך טבלה יכולים להיות מספר שורות תאג TR, שכל שורה יכולה לכלול מספר אלמנטים TD. הפעולות המופעלות כתוצאה מאירועים שונים כתובות בשפת Javascript. אם למשל נרצה שכפתור יבצע סיום של פעולה, נוסיף לכפתור פעולה בשפת javascript שתעשה משהו (למשל במקרה הזה קריאה לשרת).

Javascript – שפת ריצה (ללא קומפילציה) שבנויה מאירועים, פונקציות וכד'.

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

השרת

בשרת אנחנו משתמשים בשפת PHP עם תשתית וורדפרס.

PHP – היא שפת סקריפטים. היא קיימת בשרת בשני אופנים. להרצה בשורת הפקודה – טובה לכתיבת סקריפטים של עיבוד מידע, טיפול בקבצים וכו'. תצורה זאת לא רלוונטית לעניינו. התצורה השנייה היא חיבור לשרת ה Web. בפרויקטים שלנו נשתמש ב Apache: שירות ווב חינמי.

Apache

שרת ווב הוא שרת הממתין לתקשורת בפורט 80 בפרוטוקול HTTP או פורט 443 בפרוטוקול HTTPS (המאובטח יותר, אך מבחינתינו אופן הפעולה שלו דומה). כדי שדף יטען בדפדפן אצל הלקוח הוא שולח בקשת Get. הבקשה מגיעה לשרת בפרוטוקול HTTP/HTTPS שגורם ליצירה של דף ולשליחה שלו ללקוח. הדף יכול להיות סטטי readme.html או דינמי index.php. במקרה השני מופעל הפרשן של PHP אשר קורא את הקובץ, מבצע אותו ושולח ללקוח קובץ HTML. בקובץ הנשלח ללקוח, כבר הורץ ה PHP ואינו קיים בדף שיטען אצל הלקוח.

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

הקריאות לשרת מתחלקות לשני סוגים: GET ו POST. בסוג הראשון כל המידע מהלקוח נשלח בשורת הכותרת של ה HTTP. בעוד בשב POST נשלח קובץ. למשל טעינה של מידע לשמירה, טופס מלא (פרטי לקוח) וכד'.

MySQL

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

טבלה – הרכיב הבסיסי ביותר לשמירת מידע. לכל טבלה מבנה של רשומה המחולק לעמודות. לכל אחת מוגדר שם, סוג ואורך. אורך המידע מתחיל מביט אחד ונגמר ברכיבי מידע ענקיים (למשל לשמירת וידאו). סוגי המידע הרגילים – מספר שלם, מספר עשרוני, מחרוזת (string) וכו'.

אינדקס – מבנה מוקטן של הטבלה המאפשר גישה מהירה לרשומה.

פונקציה – קוד השמור בשרת ומאפשר עיבוד המידע בבסיס הנתונים לפני אחזורו לשרת האפליקציה.

WordPress

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

users – משתמשים במערכת – למשל הכותבים או אולי גם הקוראים. המידע אודות המשתמשים נמצא בטבלאות wp_users ו wp_usermeta. הטבלה הראשונה היא הראשית. הפרמטרים הנוספים נשמרים בטבלת ה meta.

posts – רכיב מידע בסיסי במערכת וורדפרס. בא לידי ביטוי כדף עיקרי באתר – page או כרכיב בבלוג (post). ההבדל הוא ש post יהיה עם תאריך ובדרך כלל יראו קודם הפוסטים החדשים יותר. אם תרצו כמו בעיתון. גם כאן המידע נשמר בשתי טבלאות עיקריות wp_posts ו wp_postmeta.

taxanomy – כדי לארגן את המידע משתמשים בטקסונומיות. שתי העיקריות הן קטגוריות שהן היררכיות; ותגים שהם ללא היררכיה. פוסט זה למשל יהיה בקטגוריה הקשורה למבנה אתרים. במוצרים אפשר למשל לסמן בתג "אורגני" מוצר עם פיקוח שלא נעשה בו שימוש בחומרים כימיים. מבנה הקטגוריות והתגים מתעדכן באופן דינמי על ידי הכותבים של האתר, באופן שישרת את הקוראים למצוא באופן מהיר את המידע שמעניין אותם.

WooCommece

חבילה חינמית המאפשר להפוך את אתר הוורדפרס לחנות.

מה היא בעצם חנות:

  • מוצר. הוא בעצם פוסט של וורדפרס המכיל עוד פרמטרים (meta) – למשל מחיר, תמונה, מידות, כמות במלאי וכד'.
  • טקסנומיה של "קטגורית מוצר". למשל "פירות", "ירקות" יהיו קטגוריות משנה של "פרי וירק".
  • סל קניות: רכיב (זמני) הכולל את הפריטים הנוכחיים שהלקוח מעונין לרכוש.
  • הזמנה: מה הלקוח מעונין לרכוש. להזמנה יהיו פרטים כמו תאריך, סך מחיר, כתובת למשלוח (שתעותק מה usermeta), הערות של המזמין או של מנהל החנות ועוד.
  • checkout: תהליך שבו הלקוח מספק את נתוני הכתובת, אמצעי תשלום וכד'. בסיומו מקבל מספר הזמנה למעקב.

אז איך בעצם הוורדפרס שלנו מורחב להיות חנות באמצעות ה woocommerce?

לצורך כך נעשה שימוש בצורך ארגון תוכנה שנקראת פלאגין. Plug in. כלומר נועצים משהו בשקע ואנחנו מחוברים! כלומר – כותב התשתית משאיר שקעים שאליהם כותב הפאלגין יכול להתחבר.

תשתית הוורדפרס מאפשר לאתר ולטעון פלאגינים מתשתית המקבילה ל AppStore. או לטעון קובץ ZIP עם התוכנה. (כמתכנתים אנחנו בדרך כלל נשתמש ב deployment ישירות מה PhpStorm).

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

  • אתחול: תשתית הוורדפרס טוענת לזכרון את הפלאגינים השונים אשר הוגדרו.
  • בהתאם לדף שבחרתי יטענו:
    • header – כותרת שיכולה להכין גם קוד javascript, את תפריט הניווט וכד'.
    • body – עיקר דף ה HTML. נחזור אליו עוד רגע.
    • footer – ספיח של הדף שיכלול למשל מפת אתר, מידע נוסף ובסיום התג </html>.

כאמור, מבנה הדף הוא דינמי בהתאם לכתובת שהקשתי:

אם בחרתי את הכתובת /product/name אז מוצר בשם name יוצג. כותב התבנית הגדיר כיצד יוצג בפני הלקוח מוצר.

הכתובת product-category/cat אומרת שאני מעוניין לראות את המוצרים בקטגוריה cat. כותב התבנית כתב לופ אשר עובר על כל המוצרים (אפשר כמובן להגביל למספר מוצרים) ויציג תמצית (למשל תמונה, שם ומחיר).

תבנית

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

 

כתיבת תגובה

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