ساختار فایل*ها و directoryهای یک قالب جوملا
برای ساختن یک قالب جوملا به یک پوشه (directory) در پوشه templates ریشه جوملا نیاز داریم. پس ابتدا باید یک پوشه با نام (mynewtemplate) در داخل پوشه templates جوملا ایجاد کنیم.
JoomlaRoot\templates\mynewtemplate
هر قالب جوملا در داخل پوشه مربوط به خودش باید حداقل 2 فایل به نام*های index.php و templateDetails.xml را دارا باشد.
مابراحتی می*توانیم این 2 فایل با این اسامی و پسوندها را در notepad++ ایجاد کنیم و آنها را در پوشه mynewtemplate ذخیره کنیم.
همچنین برای سازماندهی به عکس*ها و استایل*های قالب باید 2 پوشه دیگر در داخل mynewtemplate به نام*های css و images ایجاد کنیم .
در داخل فولدر CSS باید یک فایل به نام template.css ایجاد کنیم.
نکته: اگر سایت دارای 2 زبان فارسی و انگلیسی است باید یک فایل دیگر به نام template_rtl.css ایجاد کنیم.
این امکان وجود دارد که شما استایل*های مورد نظر خود را در داخل فایل index.php مستقیما وارد کنید ولی اکثر توسعه دهندگان ترجیح می*دهند که به صورت اصولی (همین روشی که دراین مقاله مورد استفاده قرار می*گیرد.) استایل*های مورد نظر را در یک یا چند فایل css جداگانه (template.css یا template_rtl.css) بنویسند و با استفاده از تگ link آن فایل*ها را در index.php (صفجه اصلی قالب*های جوملا) فراخوانی کنند.
این کار مزایای زیادی مانند: سازماندهی استایل*ها و دیباگ آسانتر به علت متمرکز بودن و کاهش زمان بارگذاری صفحه(فایل*های مجزا می*توانند cache شوند) دارد.
در کل ساختار قالب شما تاکنون باید به این صورت شده باشد.
mynewtemplate/ css/ template.css images/ index.php templateDetails.xml
ایجاد یک فایل templateDetails.xml
وجود این فایل در قالب*های جوملا ضروری است. قالب*ها بدون وجود این فایل نمی*توانند توسط جوملا شناسایی و مشاهده شوند. در واقع این فایل است قالب را به جوملا معرفی می*کند. این فایل حاوی اطلاعاتی در مورد قالب و متادیتای قالب است.
الگوی نگارش این فایل در خط پائین مشخص شده است .
نکته: البته این الگو مربوط به نسخه جوملا1.5 است .
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE install PUBLIC "-//Joomla! 1.5//DTD template 1.0//EN" "http://www.joomla.org/xml/dtd/1.5/template-install.dtd">
<install version="1.5" type="template">
<name>mynewtemplate</name>
<creationDate>2012-02-02</creationDate>
<author>Shahab Matapour</author>
<authorEmail>sh.matapour@gmail.com</authorEmail>
<authorUrl>http://www.studio-design.co</authorUrl>
<copyright>Shahab Matapour 2012</copyright>
<license>GNU/GPL</license>
<version>1.0.2</version>
<description>My New Template</description>
<files>
<filename>index.php</filename>
<filename>templateDetails.xml</filename>
<folder>images</folder>
<folder>css</folder>
</files>
<positions>
<position>breadcrumb</position>
<position>left</position>
<position>right</position>
<position>top</position>
<position>user1</position>
<position>user2</position>
<position>user3</position>
<position>user4</position>
<position>footer</position>
</positions>
</install>
برای نسخه جوملا 1.7 و 1.6 از الگو زیر استفاده می*کنیم. دقت کنید که از تگ extension بجای install استفاده شده است.
نکته: دقت کنید که مقابل version در خط دوم 1.6 را نوشتیم اگر برای جوملا 1.7 تصمیم به ایجاد قالب داشتیم باید 1.7 را بنویسیم.
<?xml version="1.0" encoding="utf-8"?>
<extension version="1.6" type="template">
<name>mynewtemplate</name>
<creationDate>2012-02-02</creationDate>
<author>Shahab Matapour</author>
<authorEmail>sh.matapour@gmail.com</authorEmail>
<authorUrl>http://www.studio-design.co</authorUrl>
<copyright>Shahab Matapour 2012</copyright>
<license>GNU/GPL</license>
<version>1.0.2</version>
<description>My New Template</description>
<files>
<filename>index.php</filename>
<filename>templateDetails.xml</filename>
<folder>images</folder>
<folder>css</folder>
</files>
<positions>
<position>breadcrumb</position>
<position>left</position>
<position>right</position>
<position>top</position>
<position>user1</position>
<position>user2</position>
<position>user3</position>
<position>user4</position>
<position>footer</position>
</positions>
</extension>
همانطور که کاملا مشخص است تمامی مشخصات در xml مابین elementها مشخص می*گردند. شاید نوشتن فایلی از ابتدا کمی دشوار باشد پیشنهاد اینست این کد را در داخل فایل templateDetails.xml خود کپی کنید و مشخصات elementها را بسته به نیازتان ویرایش کنید.
Elementهای name تا description شامل مشخصات تولید کننده قالب جوملاست.
name: نام قالب است .
نکته مهم: name باید با نام پوشه قالب (در این مثال mynewtemplate) یکی باشد.
creationDate: تاریخ ایجاد قالب
author: نام تولید کننده قالب و ... همین طور به ترتیب تا عنصر description
description: که توضیحاتی راجب این قالب ارائه میکند این توضیحات زمانی که قالب در جوملا نصب میشود نمایش داده خواهدشد.
قسمت files شامل تمامی فایل*هایی است که در قالب مورد استفاده قرار می*گیرد. ممکن است که شما در این لحظه از تعداد و نام فایل*های که قرار است در قالب از آنها استفاده کنید اطلاعی نداشته باشید، نگران این موضوع نباشید، شما می*توانید بعدا این قسمت را update کنید.
بخش position هم برای معرفی موقعیت*هایی است که شما تصمیم دارید در قالب جوملا از آنها استفاده کنید. در تنظیمات ماژول می*توانید این موقعیت*ها را برای نمایش یک ماژول انتخاب کنید.
ایجاد فایل index.php
صفحه index.php قالب*های جوملا صفحه اصلی قالب*های جوملاست . در صورتی که شما مسلط به HTML باشید می*توانید این صفحه را همانند یک صفحه HTML معمولی ایجاد کنید فقط باید در بعضی از قسمت*های آن یکسری کدهای PHP اضافه کنید. که در این مقاله به تفضیل به آنها خواهیم پرداخت.
صفحه ساختار ساده (بدون استایل) قالب جوملا می*باشد.
صفحه index.php جوملا 1.5 با کدهای php زیر شروع میشود.
<?php defined( '_JEXEC' ) or die( 'Restricted access' );?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xml:lang="<?php echo $this->language; ?>" lang="<?php echo $this->language; ?>" >
کد خط اول برای مسائل امنیتی جوملا ست و برای جلوی گیری از دسترسی غیر مجاز است.
خط بعدی Document Type Declaration(DOCTYPE) که اطلاعاتی راجع به این صفحه وب به Web Crawlerها(خزنده*های موتورهای جستجو) ارائه می*کند.
خط سوم هم به صفحه index.php قالب می*گوید که مدیر سایت چه زبانی را برای نمایش سایت (در جوملا اصطلاحا front-end میگوییم) مشخص کرده است.
همانطور که میدانید یک صفحه HTML به دو قست تقسیم میشود (head و body) بخش head شامل اطلاعاتی درخصوص منابعی که در این قالب جوملا می*خواهیم از آن استفاده کنیم است در واقع از این قسمت باید آن منابع را به قالب لینک کنیم.
بخش body شامل کدهای لایه مختلف ساختار قسمت*های مختلف قالب است .
کد php مربوط بخش head صفحه index.php قالب
برای قالب*هایی که از یک زبان استفاده میکنند (فارسی یا انگلیسی) از این کد استفاده می*کنیم
<head>
<jdoc:include type="head" />
<link rel="stylesheet" href="<?php echo $this->baseurl ?>/templates/system/css/system.css" type="text/css" />
<link rel="stylesheet" href="<?php echo $this->baseurl ?>/templates/system/css/general.css" type="text/css" />
<link rel="stylesheet" href="<?php echo $this->baseurl ?>/templates/<?php echo $this->template; ?>/css/template.css" type="text/css" />
</head>
برای قالب*های که از 2 زبان مختلف که یکی از آنها از راست به چپ است مثل فارسی ودیگری از چپ به راست است مثل انگلیسی (RTL یا LTR) استفاده می*کنند این کد را می*نویسیم:
نکته: دقت کنید زبان فارسی و عربی چون هردو RTL هستند از نوع اول استفاده می*کنیم.
<head>
<jdoc:include type="head" />
<link rel="stylesheet" href="<?php echo $this->baseurl ?>/templates/system/css/system.css" type="text/css" />
<link rel="stylesheet" href="<?php echo $this->baseurl ?>/templates/system/css/general.css" type="text/css" />
<?php if($this->direction == 'rtl') : ?>
<link href="<?php echo $this->baseurl ?>/templates/<?php echo $this->template; ?>/css/template_rtl.css" rel="stylesheet" type="text/css" />
<?php else: ?>
<link rel="stylesheet" href="<?php echo $this->baseurl ?>/templates/<?php echo $this->template; ?>/css/template.css" type="text/css" />
<?php endif; ?>
</head>
خط
<jdoc:include type="head" />
اطلاعات مربوط به header را در قالب*های جوملا قرار می*دهد شامل اطلاعات متا و عنوان صفحه و ...
کدهای
<link rel="stylesheet" href="<?php echo $this->baseurl ?>/templates/system/css/system.css" type="text/css" />
<link rel="stylesheet" href="<?php echo $this->baseurl ?>/templates/system/css/general.css" type="text/css" />
برای اضافه کردن 2تا فایل css ای که تمام قالب*های جوملا 1.5 از آنها استفاده میکنند.
کدهای php برای قسمت body فایل index.phpقالب
<body>
<jdoc:include type="modules" name="top" />
<jdoc:include type="component" />
<jdoc:include type="modules" name="bottom" />
</body>
خیلی شگفت آور است؟ ولی حقیقت دارد همین کدها برای راه اندازی و ایجاد یک قالب جوملا کفایت می*کند. در این حالت ما 2 position به نام*های top و bottom داریم و یک موقعیت برای نمایش مطالب و سایر componentها داریم.
دستور jdoc به جوملا می*گوید که از سیستم مدیریت محتوا جوملا یکسری منابع را فراخوانی (include) کند. Type مشخص کننده نوع آن منابع است دقت کنید که در اینجا type هم modules و هم component استفاده شده است. جهت کسب اطلاعات بیشتر در این زمینه به مقاله دستورات jdoc مراجعه فرمایید.
وقتی در یک قسمت از فایل index.php می*نویسیم:
<jdoc:include type="modules" name="top" />
یعنی در آن قسمت از قالب یک position به نام top ایجاد کن. به جای top هر اسم دیگری می*تواند باشد ولی به این نکته توجه داشته باشید که قبلا این نام را در فایل templateDetails.xml به عنوان position مشخص کرده باشیم.
هنگامی در یک قسمت از فایل index.php قالب می*نویسیم:
<jdoc:include type="component" />
یعنی آن قسمت مکان کلیه مطالب (مقاله*ها و مطالبی که در مدیریت مطالب ایجاد می*شوند.) و کامپوننت*های جوملا است. نوشتن این کد برای فایل index.php خیلی مهم است. شما می*توانید ماژول*های بیشتری در templateDetails.xml معرفی کرده و در صفحه index.php ایجاد نمایید. و در نهایت بستن تگ html به این صورت
</html>
انجام می*شود.
در نهایت کد صفحه index.php قالب جوملا 1.5 ما به این صورت شد:
<?php defined( '_JEXEC' ) or die( 'Restricted access' );?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xml:lang="<?php echo $this->language; ?>" lang="<?php echo $this->language; ?>" >
<head>
<jdoc:include type="head" />
<link rel="stylesheet" href="<?php echo $this->baseurl ?>/templates/mynewtemplate/css/template.css" type="text/css" />
</head>
<body>
<jdoc:include type="modules" name="top" />
<jdoc:include type="component" />
<jdoc:include type="modules" name="bottom" />
</body>
</html>
در جوملا 1.5 ما می*توانیم کل پوشه mynewtemplate با تمام فایل*ها و ساب فولدرها در پوشه templates جوملا آپلود کنیم یا آن را zip کنیم و از مدیریت جوملا در قسمت نصب و حذف اقدام به نصب این قالب کنیم.
بعد از نصب یا آپلود قالب باید به قسمت مدیریت قالب*ها برویم قالب mynewtemplate بر پیش فرض قرار دهیم.
نکاتی در مورد اضافه کردن عکس و فایل javascript و غیره در