מדיה ויקי

סנוב, את מדיה ויקי ניסית? נגיעה על קצה המזלג במערכת התוכן הפופלרית

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

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

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

מבנה תיקיה של קבצי מדיה ויקי
מבנה תיקיה של קבצי מדיה ויקי

עכשיו כל מה שצריך זה להכנס לדומיין עם הדפדפן. בניגוד לוורדפרס ולדרופל, מדיה ויקי לא משנה בפועל שום קבצי התקנה. אחרי שאלון קצר שבו בת'כלס מה שחשוב זה שם המשתמש והסיסמה של ה-MySQL, ניתנת לנו להוריד קובץ LocalSettings.php שהוא הקובץ שבו נמצאות כל ההגדרות של ה-MySQL. אנחנו יכולים להוסיף לקובץ הזה הגדרות רבות בהתאם למה שאנחנו צריכים. למשל, אם נוסיף לקובץ את ההגדרה הזו:


$wgRawHtml = true;

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


$wgLogo             = "$wgServer/logo.jpg";

רוב האנשים לא רוצים להסתפק בתבנית המוכרת של מדיה ויקי ורוצים לעשות תבנית משלהם. כמובן ששום דבר לא מונע מכם לשנות את התבנית הדיפולטיבית vector כרצונכם. אבל על מנת ששדרוגים עתידיים שתעשו לא יהפכו לכאב ראש רציני, אני ממליץ לכם ליצור תבנית משלכם. התבניות במדיה ויקי הן פשוטות למדי. כולן נמצאות תחת תיקית skins אם תכנסו לספריה תוכלו לראות תיקיות שבה נמצאים המשאבים השונים של התבנית (קבצי CSS, JS ותמונות) וקובץ PHP שבו נמצא עיקר הקוד.

הקוד הוא מונחה עצמים, אז ככה שאם אתם רגילים לברדק של וורדפרס/דרופל צפויה לכם הפתעה. לאנשי ג'ומלה זה יהיה כמובן הרבה יותר מוכר. קובץ ה-PHP של התבנית שלכם מורכב בעצם משני PHP class. ראשית אנו צריכים לכלול את קובץ האב של ה-class של התבניות:


require_once('includes/SkinTemplate.php');

ה-class הראשון הוא המקום שבו אנו מגדירים את התבנית שלנו, הוא יורש מ-class ששמו הוא SkinTemplate. הנה דוגמה להגדרה של אתר שבניתי לא מזמן עבור עמותת טולקין בישראל:


class SkinTolkiencoil extends SkinTemplate {
	function initPage( &$out ) {
		SkinTemplate::initPage( $out );
		$this->skinname  = 'tolkiencoil';
		$this->stylename = 'tolkiencoil';
		$this->template  = 'TolkiencoilTemplate';
	}
}

בגדול אנו מגדירים כאן שלושה משתנים – שם הסקין כפי שאני אגדיר אותו ב-LocalSettings, שם התיקיה שבה יש את כל הקבצים ושם ה-class שמכיל את הטמפלייט והוא ה-class השני שנמצא בקובץ:


class TolkiencoilTemplate extends QuickTemplate {
	function execute() {}
}

בתוך ה- execute אני יכול להכניס את ה-HTML של התבנית, עם משתני ה-PHP במיטב המסורת האיטלקית כמובן.

כל מה שנותר לנו לעשות זה להגדיר את התבנית שלנו ב-LocalSetting.php באופן הבא:


$wgDefaultSkin = "tolkiencoil";

שימו לב שאם מדובר בויקימדיה קיים וחלק מהמשתמשים בו פעילים – יש מצב שהסקין הדיפולטיבי שלהם מוגדר ותצטרכו לשנות אותו – איך משנים אותו? או ישירות דרך מסד הנתונים או באמצעות הפעלת קובץ PHP מהטרמינל באופן הבא


$ php userOptions.php skin --old "monobook" --new "vector"

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

פוסטים נוספים שכדאי לקרוא

פיתוח ב-JavaScript

Axios interceptors

תכנון נכון של קריאות AJAX באפליקציה ריאקטית וניהול השגיאות או ההצלחות עם פיצ׳ר נחמד של axios

פתרונות ומאמרים על פיתוח אינטרנט

רינדור של קליינט סייד עם SSR

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

פתרונות ומאמרים על פיתוח אינטרנט

יישום של nonce על מנת להגן מפני התקפות injection

בפוסט הקודם הסברתי על hash עם CSP על משאבי inline – שזה נחמד ומעולה אבל פחות ישים בעולם האמיתי שבו בדרך כלל התוכן ה-inline (בין

יסודות בתכנות

מספרים בינאריים בקוד

איך, ויותר חשוב למה, משתמשים במספרים בינאריים בתכנות? גם בפייתון ובג׳אווהסקריפט?

תמונה מצוירת של רובוט שמנקה HTML
יסודות בתכנות

סניטציה – למה זה חשוב

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

גלילה לראש העמוד