לאחר הנפילה האחרונה של הבלוג שלי, שקלתי להעביר אותי למערכת בלוגים מבוססת שפה שמהדרת לאסמבלי, לאור מבחני הביצועים העלובים של וורדפרס שביצע ארתיום. הוא מצידו החליט לפתח פריים וורק לWEB בשם CPPCMS וממנו בנה את הבלוג שלו, והחלטתי לקפוץ למים.

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

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

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

אחרי הרבה שעות…. גיליתי שזה בגלל משהו מאוד פשוט! שחיפשתי בגוגל על המרה ממספר למחרוזת, הסתמכתי על תגובה של מישהו שכתב איך לדעתו C++ צריכה להיות כתגובה לפוסט של מישהו שכתב איך באמת צריך לעשות. פשוט הדרך שלו הייתה יותר קצרה אז ניגשתי אליו 😛

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

הקוד עצמו נעשה בקובץ blog.cpp צריך לציין את הביטוי הרגולרי שיגזור את הפרמטרים מהURL, ולהפנות לפונקציה שתטפל בהם ותציג את הפוסט:

url.add("^/test/(\\d+)/(\\d+)/(\\d+)/(.*)$",
boost::bind(&Blog::mypost,this,$1,$2,$3,$4,false));
fmt.post=root + "/post/%1%/%2%/%3%/%4%";


void Blog::mypost(string s_year, string s_month, string s_day, string s_title, bool preview)
row r;
stringstream s;
int id;
transaction tr(sql);
sql << "SELECT `id` FROM `posts` WHERE strftime('%Y', `publish`) = ? AND strftime('%m', `publish`) = ? AND strftime('%d', `publish`) = ? AND `title` = ?", s_year, s_month, s_day, s_title;
sql.single(r);
r>>id;
s << id;
Blog::post(s.str(), preview);
}

וכמובן להוסיף את הפונקציה החדשה לקובץ blog.h