הכותרת אמנם יכולה להטעות אבל מטרת פוסט זה היא להסביר כיצד להפוך את ג'ומלה לרב-אתרי, או באנגלית multi-site, כך שבאמצעות התקנה בודדת של ג'ומלה תוכלו לנהל מספר אתרים כאשר רק קובץ קונפיגורציה אחד מגדיר אתר אחד מיני רבים. אמנם ישנם תוספים שונים למטרה זו, אך אני ממליץ לבצע זאת בצורה מלאכותית ולא בצורת תוסף, כי כך ניתן לשלוט על אופן שבו האתרים השונים ינוהלו בצורה טובה יותר ולכוונן ביצועים ע"י חלוקת עומסים במקרה של שרתים מרובים.

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

שלב ראשון - כיצד אתרים יזוהו

בשלב זה נחליט כיצד הגולשים ינותבו בין האתרים. ניתן לעשות זאת באמצעות domain-prefix או querystring. כאשר בראשונה התחילית של הדומיין תחליט לאיזה אתר אנו נגלוש ובשני התוספת שתתווסף ל-domain תקבע זאת. בפוסט שאני אדגים אשתמש בשיטה הראשונה.

שלב שני - הגדרת קובץ ניתוב

בקובץ ניתוב נגדיר כיצד אנו נדע לאיזה אתר הגולש הגיע. הקובץ יקרא routing.php והוא ימוקם בספרית ה-includes של הג'ומלה. הקובץ יחלץ מתוך שם הדומיין את ה-prefix.

defined( '_JEXEC' ) or die( 'Restricted access' );

$baseurl = 'domain.com'; /* your domain without any prefix like www */
$default_prefix = 'www';
$config_path = 'config'.DS;
$sitename=str_replace('.'.$baseurl, '', $_SERVER['SERVER_NAME']);

/*

// for querystring manipulation
// if the structure is: http://www.domain.com/sites/sitename
// ** without sub-domain **
$ar = explode( "/", $_SERVER['REQUEST_URI']);
$sitename = $ar[2];

*/
if(!file_exists(JPATH_ROOT.DS. $config_path.$sitename.".php"))
{
if(strpos($_SERVER['SERVER_NAME'], $baseurl)&&($sitename!=$default_prefix))
// if there is a domain request and not sub domain exist redirect to default site
{
header ("Location: http://'.$default_prefix.".$baseurl);
die('no such sub domain.<br/>redirecting to default site...');
}
$sitename = $default_prefix; // if u want to premit ip domain request (or computer name; localhost also)
}
define( 'JCONFIG_SITENAME', $sitename);
define('JCONFIG_PATHNAME',$config_path.JCONFIG_SITENAME.'.php');

קובץ זה יחלץ את התחילית של הדומיין ויכניס אותו לקבוע JCONFIG_SITENAME ואת המיקום של קובץ הקונפיגורציה תחת הקבוע JCONFIG_PATHNAME (קובץ הקונפיגורציה של ג'ומלה באופן ברירת מחדל הינו configuration.php והוא ממוקם בספריה הראשית של הג'ומלה). קבצי הקונפיגורציה ימוקמו תחת הספריה config תחת הספריה הראשית של ג'ומלה. ספריה זו תכיל את כל קבצי הקונפיגורציה של האתרים. אם קובץ הקונפיגורציה של הסאב-דומיין אינו קיים הוא ינותב לאתר הברירת מחדל.

יש להעתיק קובץ זה גם לספרית ה-includes של ספרית ה-administrator.

שלב שלישי - עדכון קבצי הג'ומלה

בשלב זה נעדכן את קבצי הג'ומלה שיתאימו להגדרות שעשינו. דבר ראשון נעדכן קבצי ה-index.php שיבצעו את הקובץ שעדכנו.

נוסיף את השורה הבאה אחרי שורה 21 בקובץ index.php שנמצא בספריה הראשית של ג'ומלה וקובץ index.php שנמצא בספריה administrator:

require_once ( JPATH_BASE .DS.'includes'.DS.'routing.php' );

לאחר מכן נעדכן את תצורת הג'ומלה שתצביע על הנתיב הנכון של קובץ הקונפיגורציה של האתר הספציפי. נעשה זאת באמצעות פקודת sed פשוטה. תחת לינוקס:

for i in `find /your/joomla/full_path/ -type f; do echo sed -i "s;'configuration.php';JCONFIG_PATHNAME;" $i; done

תחת חלונות:

FOR /r "your\joomla\full\path" %%a in (*.php) do  (
sed -i "s;'configuration.php';JCONFIG_PATHNAME;" "%%a"
)

יש להחליף את your\joomla\full\path בנתיב ההתקנה של הג'ומלה על השרת. עבור שרת חלונות הפקודה sed אינה מובנית, על כן נצטרך להתקינה. ניתן להורידו מכאן.

כאן למעשה סיימנו את העדכון בקוד. שימו לב כי אם הדומיין ברירת מחדל שלך הוא www עליך ליצור קובץ קונפיגורציה של ג'ומלה בשם www.php תחת הספריה config. קרוב לוודאי שתצטרך ליצור ספריה זו, אם עדיין לא יצרת. קובץ הקונפיגורציה המקורי של ג'ומלה (configuration.php), שנמצא בספריה הראשית של ג'ומלה, יוכל לשמש אותך כקובץ ברירת המחדל של הדומיין המרכזי (www.php).

שלב אחרון - בסיס נתונים לכל דומיין

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

כדי לשכפל בסיס נתונים תצטרך ליצא בסיס נתונים לפי ה-prefix של שמות הטבלאות לשם כך תוכל להשתמש באחד מהסקריפטים הבאים (לינוקס או חלונות).
עבור לינוקס:

#!/bin/bash
DB="$1"
PREFIX=$2
EXPORT_FILE=$3
HOST=YOUR_DB_HOST
USER=YOUR_DB_USER
PASSWORD=YOUR_DB_PASSWORD

if [ -z ${EXPORT_FILE} ]; then
EXPORT_FILE="export.sql"
fi

if [ -z ${DB} ]; then
echo "YOU NEED AT LEAST 2 ARGS:"
echo "1ST ARG DB"
echo "2ND ARG PREFIX"
echo "3RD ARG EXPORT FILE NAME (DEFAULT: export.sql)"
else
if [ -z ${PREFIX} ]; then
echo "YOU DIDNT FILLED DB"
else
TEMP_FILE="/tmp/agron.mysql"
mysql -h ${HOST} -u ${USER} --password=${PASSWORD} -D ${DB} -e "SHOW TABLES FROM ${DB} LIKE '${PREFIX}%'" -N > ${TEMP_FILE}

if [ -w ${EXPORT_FILE} ]; then
rm ${EXPORT_FILE}
fi

cat ${TEMP_FILE} | while read LINE ; do
echo ${LINE}
mysqldump -h ${HOST} -u ${USER} --password=${PASSWORD} ${DB} ${LINE} >> ${EXPORT_FILE}
done

if [ -w ${TEMP_FILE} ]; then
rm ${TEMP_FILE}
fi
echo "Export done"
fi
fi
fi

עבור חלונות:

@echo off
IF dummy==dummy%1 (
GOTO NOARGS
) ELSE (
IF dummy==dummy%2 (
GOTO NOARGS
)
SET DB=%1
SET PREFIX=%2
SET HOST=YOUR_HOST
SET USER=YOUR_DB_USER
SET PASSWORD=YOUR_DB_PASSWORD
IF dummy==dummy%3 (
:: IF NOT SET PARAMETER 3
SET EXPORT_FILE=export.sql
) ELSE (
:: IF SET PARAMETER 3
SET EXPORT_FILE=%3
)
mysql -u %USER% --password=%PASSWORD% -e "SHOW TABLES FROM %DB% LIKE '%PREFIX%%%'" -N > c:\windows\temp\mysql.temp
IF EXIST %EXPORT_FILE% del %EXPORT_FILE%
FOR /F "eol=; " %%i in (c:\windows\temp\mysql.temp) do (
@echo %%i
mysqldump -u %USER% --password=%PASSWORD% %DB% %%i >> %EXPORT_FILE%
)
IF EXIST c:\windows\temp\mysql.temp del c:\windows\temp\mysql.temp
ECHO Export done
GOTO :END
:NOARGS
ECHO YOU NEED AT LEAST 2 ARGS:
ECHO 1ST ARG DB
ECHO 2ND ARG PREFIX
ECHO 3RD ARG EXPORT FILE NAME (DEFAULT: export.sql)
:END

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

עד כאן שידורינו להפעם...

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

אתר אגרון בי.סי.אנד.סי. בע"מ משתמש בשיטה זו ליצירת multisite (ראו רשימת ספריות מקוונות בצד ימין).

הוספת תגובה

0
  • לא נמצאו תגובות