קישור לתכנים בג'ומלה | אינטרנט ישראל
אודות אינטרנט ישראל
התחברו אלי בפייסבוק
דף הבית › פיתוח אינטרנט › פתרונות ומאמרים על פיתוח אינטרנט › קישור לתכנים בג'ומלה
קישור לתכנים בג'ומלה
מאי 3, 2010 תגיות : ג'ומלה סקריפטים פתרונות בקטגוריה: פתרונות ומאמרים על פיתוח אינטרנטהמאמר נכתב על ידי רן בר-זיק, מתכנת מנוסה וכותב כל המאמרים באתר אינטרנט ישראל. כל מי שעבד על CMS מסוים, בין אם מדובר בוורדפרס, דרופל או ג'ומלה, יודע שלעתים קרובות יש צורך לקשר לדפים מסוימים שה-ID שלהם ידוע לנו. זה יכול להיות מודול שמקשר אל מאמרים נבחרים, מודול שמציג כל פעם מאמר אקראי עם לינק או אפילו יצירת XML שבו יש את הכותרת של התוכן והקישור שלו.
בג'ומלה קל מאד לקשר לתכנים במידה וה-ID של התוכן ידוע, אך מאד קשה למצוא את הקישור שהוא URL Friendly או במונחי ג'ומלה SEF. קישור SEF הוא קישור שבמקום http://joomla.org/index.php?option=com_content&task=view&id=2985&Itemid=33 הוא יראה לי את הקישור הבא: http://www.joomla.org/content/view/2985/33/. ישנם מספר קישורי SEF שאפשר להפעיל – הראשון שבהם הוא alias שבו אני לא אדון כאן ומאפשר לי גישה אל פריט התוכן גם אם הוא לא נמצא בתפריט. השני הוא ה-SEF שנוצר באמצעות שימוש ב-menu. כאשר אני מוסיף פריט מידע כלשהו לתפריט האתר, הוא יוצר לי SEF שבאמצעותו אני יכול לגשת אל פריט המידע שלי.
תזכורת: כך יוצרים פריט מידע בג'ומלה – נכנסים ל'Menus' ואז ל'Menus Manager':
לוחצים על הוספת פריט חדש (סימן הפלוס הירוק הגדול) ואז מגיעים למסך הזה:
וכאן כבר בוחרים את פריט המידע שצריך, במקרה שלי ברוב הפעמים אני בוחר 'article'. לאחר שבחרנו ושמרנו, אנו נראה שיש לנו בתפריט את פריט המידע – בדרך כלל מאמר. המאמר הזה הוא בעל SEF שניתן לו על ידי ה-menu.
באופן שמאד הפתיע אותי, אי אפשר להגיע ל-SEF של ה-menu באמצעות פונקציה/שאילתה פשוטה (לעומת דרופל למשל, שמאפשר לעשות את זה בקלות באמצעות drupal_get_path_alias). אבל מה לעשות שלטובת מנועי החיפוש אני כן צריך להשתמש ב-URL אחיד? לפיכך יש צורך לצלול פנימה אל מסד הנתונים ולהשיג את ה-SEF שלא נשמר יחד עם ה-content (בניגוד ל-alias שכן נשמר) אלא שמור בטבלה שנקראת menu וגם אז צריך להוציא אותו באופן רקורסיבי. בלעחס.
דוגמת הקוד שאני מביא כאן נמצאת ב-class שנקרא myModuleHelper. אני יוצא מנקודת הנחה שאני מקבל id של מאמר מתוך טבלת content ואני צריך למצוא את ה-SEF URL.
defined('_JEXEC') or die('Direct Access to this location is not allowed.');
class myModuleHelper
public function getMyMenuSEF($contentId) {
$db = &amp;JFactory::getDBO();
$query = "SELECT id FROM #__menu where link LIKE \"%$contentId\" LIMIT 1";
$db-&gt;setQuery($query);
$result = ($items = $db-&gt;loadObjectList())?$items:array();
$menuItemId = $result[0]-&gt;id;
return myModuleHelper::getMyMenuURL($menuItemId);
private function getMyMenuURL($menuItemId) {
$url = array();
$i = false;
while($i == false) {
$item = myModuleHelper::getMyAliasAndParent ($menuItemId);
if($item-&gt;parent != 0) {
$url[] = $item-&gt;alias;
$menuItemId = $item-&gt;parent;
$i = true;
$url = array_reverse($url);
$url = implode('/', $url);
private function getMyAliasAndParent ($menuItemId) { //Getting the alias and parent
$query = "SELECT alias, parent FROM #__menu where id = $menuItemId LIMIT 1";
$results = ($items = $db-&gt;loadObjectList())?$items:array();
if($results) {
return $results[0];
כפי שניתן לראות מדובר בקוד מסובך הרבה יותר – ראשית אני מקבל את ה-id של ה-content ואז מוצא באמצעותו את ה-id של ה-menu ואת זה רק באמצעות LIKE ל-URL שיש ב-menu, אחרי כן פונקציה רקורסיבית עוברת על כל ההורים ומרכיבה מהם את ה-SEF URL. התוצאה היא ה-URL. אם יש לי מודול, אני אשתמש בשורות הבאות להכליל את myModuleHelper (ששמור בשם myModuleHelper.php באותה תיקיה), ליצור template ולאפשר לו להשתמש במשתנה
itemLink.
// get the item link to display from the helper
$itemLink = myModuleHelper::getMyMenuSEF($ContentID);
// include the template for display
require(JModuleHelper::getLayoutPath('mod_Template'));
אם למישהו מהקוראים יש פתרון יותר אלגנטי לקבלת SEF של menuitem לפי content id – אשמח לדעת על כך!
כדאי תמיד להשאר מעודכנים! הרשמו לעדכונים של האתר במייל! - המייל יישלח כל יום ראשון בעשר בבוקר ויכיל אך ורק את המאמרים שהתפרסמו באינטרנט ישראל. ללא ספאם, ללא הצפות, ללא בלגנים. 🙂	אהבתם? לא אהבתם? דרגו!
(אין הצבעות)	﻿
תגיות: ג'ומלה, סקריפטים, פתרונות	פורסם בקטגוריה: פתרונות ומאמרים על פיתוח אינטרנט	אל תשארו מאחור! יש עוד מה ללמוד!
בקטגוריות המדריכים יש סדרות מאמרים שמסבירות על מגוון נושאים בפיתוח אינטרנט. ממדריכים מקיפים ל-MongoDB, Node.js ועד למדריכים הקשורים לפרונט אנד: jQuery, HTML5 ו-SASS. לחצו כאן על מנת לראות את המדריכים שיש באתר.
באתר אין רק מדריכים אלא גם מאמרים רבים העוסקים בפיתוח אינטרנט. ממאמרים על תשתית פיתוח נכונה, בדיקות אוטומטיות במגוון סביבות ועוד. לחצו כאן על מנת להגיע אל קטגורית מאמרי הפיתוח.
יש עוד דרכים רבות להמשיך ולהשאר מעודכנים: עמוד הפייסבוק של אינטרנט ישראל שולח עידכונים כשיש מאמרים חדשים וחדשות הנוגעות למפתחים ופיד ה.ר.ס.ס. של האתר יעדכן אתכם בכל פעם שמתפרסם מאמר חדש. ניתן גם להרשם באמצעות המייל מצד שמאל על מנת לקבל עדכון למייל בכל פעם שהאתר מתעדכן.
תמיד טוב גם להיות בקשר אישי! אני (רן בר-זיק) אשמח להכיר אותך! מתכנתים ואנשי ווב יותר ממוזמנים להתחבר אלי באמצעות הפרופיל שלי בפייסבוק, חשבון הטוויטר שלי או חשבון הלינקדין. מתכנתים מוזמנים להעיר, להאיר ולעקוב אחר הפרויקטים שלי ב-GitHub
‹ הוספת סוג חדש של פרמטר לג'ומלה
MooTools – מבוא ›
קטגוריותמדריכים
לייקקו אותנו בפייסבוק	מפתחי ווב? תנו לייק לדף הפייסבוק של אינטרנט ישראל! חדשות ועדכונים רלוונטיים וגם קצת דברים שמצחיקים את כל מי שיודע קוד.
העדכונים נשלחים אך ורק כאשר האתר מתעדכן.תשארו בקשר!
תגיות נושאים חמים באתר אינטרנט ישראלActionScript 3
אינטרנט ועסקים
ג'אווה סקריפט ו-jQuery באתרי אינטרנט
האחראי על האינטרנט
וידאו באתר אינטרנט
מידע למפתחים
ספק אינטרנט
ספרית jQuery
תשתית
רן בר-זיק	כותב כל המאמרים באינטרנט ישראל, מפתח אינטרנט מנוסה במגוון שפות ופלטפורמות.
ניתן ליצור איתי קשר באמצעות:
כתובת המייל שלי: info@internet-israel.com.
פרופיל הלינקדאין שלי הטוויטר שלי
פרופיל הפייסבוק שלי
אני תמיד שמח לייעץ ולעזור, אך בשל עומס הפניות הרב, אני לא תמיד מצליח לענות במהירות.
מאמרים אחרונים	דוקר – כניסה לתוך קונטיינר ופעולות בתוכו
יולי 23, 2017
גוגל מתריעה על אתרים לא מאובטחים
כך שר האוצר מנסה לשתות את הפרטים שלכם עבור המפלגה שלו
ניתוח בקשות באמצעות לשונית ה-network
יולי 9, 2017
באג אבטחה קריטי באתר של מפלגת העבודה
כל הזכויות שמורות לרן בר-זיק ולאינטרנט ישראל | מדיניות הפרטיות של אתר אינטרנט ישראל | אתר אינטרנט ישראל נגיש לפי תקן WCAG 2.0 AA | הצהרת הנגישות של האתר