اصطلاحات مادایکس
06 مهر 1388 ساعت 09:20
منابع، ترجمه کلمه Resources و در واقع همون منابع مورد استفاده مادایکس هست. این بخش، در نسخه Revolution از منوی سمت چپ و نسخه های Evolution و قبلتر در مسیر زیر قابل دسترسیه
منابع > مدیریت منابع
Resources > Resource management
در ادامه با تعریف اصطلاحات مادایکس که مهمترینهاش در این بخشه، متوجه اهمیت و Resource بودن اون میشی.
قالب (Template)
این بخش حاوی قالب های سایته. این قالبها بصورت HTML هستند و شامل همه کدهای یک صفحه کامل می تونه باشه یعنی میتونه خیلی راحت با تگ <HTML> شروع بشه و با تگ <HTML/> تموم بشه و مثل بعضی سیستمها محدود نیست که یه قالب ثابت کلی داشته باشند و فقط امکان تغییر بعضی بخشها رو بدن. همینطور برخلاف سیستم های معروفی مثل جوملا و وردپرس، خبری از کدهای PHP تو قالب نیست و اینطور میشه که کاربر غیربرنامه نویس برای ویرایش قالب، سرش گیج نمیره!
تو می تونی هر تعداد که قالب نیاز داری بسازی. وقتی میخوای یک صفحه (پرونده) جدید در مادایکس بسازی یا صفحه ای رو ویرایش کنی، یک منو حاوی لیست قالبهای موجود رو اونجا می بینی و می تونی انتخاب کنی که اون صفحه از چه قالبی استفاده کنه. وقتی بازدیدکننده سایت، صفحه رو میخواد مشاهده کنه، کدهای قالب اون صفحه کامل لود میشه و اطلاعات صفحه در کدهای قالب قرار میگیره و چاپ میشه.
مادایکس یه سری تگ مخصوص خودش داره که خروجی خاصی رو میدن. در قالب علاوه بر HTML، اون تگها هم میتونه استفاده بشه. مثلا توی نسخه های Evolution و قبلتر، تگ [(site_name)] عنوان سایت که در بخش مدیریت وارد شده رو چاپ می کنه. من از این تگ در تگ <TITLE> قالبهای همین بلاگ استفاده کردم.
اگه این مطلب رو تا انتها بخونی، با نحوه پردازش صفحه ها در مادایکس آشنا میشی.
متغیر قالب (Template Variable)
موقع ساختن یا ویرایش یک صفحه در بخش مدیریت، یه سری فیلد معمول مثل عنوان صفحه (Page Title)،خلاصه مطلب (Summary)، محتوا (Content) و غیره رو برای وارد کردن اطلاعات اون صفحه میبینی. حالا به این فکر کن که برای هر صفحه نیاز به فیلدهای بیشتری داشته باشی. مثلا صفحات خبر یه سایت، علاوه بر فیلدهای موجود، به یه عکس هم نیاز دارند یا مثلا من در یکی از کارهام برای یه شرکتی که محصولات خودش رو معرفی می کرد و میفروخت، برای هر محصول یک صفحه ساختم و علاوه بر فیلدهای موجود، به فیلد دیگه ای برای وارد کردن قیمت محصولات نیاز داشتم.
متغیر قالب، راه حلی برای چنین مشکلاتیه. در مادایکس تو می تونی هر تعداد که دوست داری فیلد اضافی بسازی. این فیلدهای اضافی بعد از اینکه ساختیشون در همون بخش ساخت یا ویرایش صفحه ظاهر میشن.
این امکان، به گفته خود مادایکسی ها، به این شکل، ابتکار مادایکسی هاست و قبلا نبوده. وردپرس تو نسخه های جدیدش همچین چیزی رو اضافه کرده.
متغیرهای قالب توی خودشون امکانات جالب دیگه ای دارند. اول اینکه متغیرهای قالب، به قالب منسوب میشن یعنی موقع ساختنشون باید قالبهایی که میخواید این فیلد بهشون اضافه بشه رو انتخاب کنید. مثلا برای همین بلاگ، دو تا قالب دارم. یکی برای صفحات اصلی مثل خانه یا تماس و غیره هست و یکی برای نمایش پست که یکم با اولی فرق داره. من برای بعضی پستهام نیاز به عکس داشتم و یک متغیر قالب ساختم و قالب پستهام رو بهش منسوب کردم. حالا وقتی دارم پست جدید مینویسم یا پستی رو ویرایش می کنم، فیلد عکس رو میبینم و در صفحه هایی که از این قالب استفاده نمی کنه، چیزی ندارم. یعنی خلاصه شما تعیین می کنید که هر متغیر قالب، توی چه قالبهایی مشاهده بشه و تو کدوم نشه.
امکان دوم، تعیین سطح دسترسی برای متغیرهای قالبه. مثلا فلان مدیر این متغیر قالب رو نداشته باشه و فلان مدیر داشته باشه. اینجوری میشه برای اطلاعات حساس صفحه، متغیر قالب ساخت که یه گروه خاص از مدیرها بتونن بهش دسترسی داشته باشند.
امکان خوب دیگه متغیرهای قالب، تعیین نوع فیلد و ابزارهای لازم هست. یعنی هم میتونی متغیر قالب از نوع checkbox یا radio یا select بسازید و حتی گزینه پیش فرض هم براش تعیین کنی و هم می تونی به این فیلد ابزارهایی رو اضافه کنی. مثلا میشه فیلد از نوع image ساخت. خروجی چنین فیلدی، یه کادر شبیه فیلد upload هست ولی وارد فایل منیجر مادایکس و بخش تصاویر میشی. اونجا تصاویر موجود رو بصورت Thumbnail و کوچیک میبینی و می تونی عکسهای جدید آپلود کنی. ابزار پرکاربرد دیگه، ویرایشگره. یعنی میشه به سادگی متغیر قالب از نوع textarea ساخت که Editor داشته باشه. این ابزارها بیشتر هستند مثل file برای انتخاب و آپلود فایل، url برای وارد کردن URL و گرفتن لینک در خروجی و چیزهای دیگه.
اگه متغیرهای قالب رو درک کرده باشی و تست کنی، میفهمی که مادایکس به هیچ وجه یه سیستم فله نیست و برای طراحی هر بخشش، کار زیادی انجام شده.
برای چاپ متغیرهای قالب، یه تگ مخصوص وجود داره: [*name*]
برای مثال همون سایتی که گفتم برای وارد کردن قیمت محصولاتش یه متغیرقالب ساختم. اگر نام این متغیر قالب رو price گذاشته باشم، هرجای قالب (!) یا صفحه (!) که تگ [*price*] رو قرار بدم، مقداری که توی فیلد قیمت وارد کردم چاپ میشه.
نکته اینجاست که تگ متغیر قالب، محتوای مربوط به صفحه جاری رو چاپ می کنه. یعنی اگر من برای پستهام متغیر قالب با نام postImage ساختم و توی قالب مخصوص پستهام قرار دادم، وقتی این صفحه (همینی که داری میبینی) داره لود میشه، مقدارش فقط در اطلاعات همین صفحه جستجو میشه.
در واقع این تگ، مخصوص متغیرهای قالب نیست! این تگ مخصوص چاپ اطلاعات صفحه جاریه. یعنی فیلدهای پیش فرض مادایکس مثل عنوان و عنوان بلند و توضیحات و خلاصه و غیره صفحه رو هم میشه با این تگ چاپ کرد. شناسه فیلد عنوان صفحه کلمه pagetitle هست یعنی برای چاپ عنوان صفحه، کافیه این تگ رو هر جای قالب که دوست داری عنوان چاپ شه قرار بدی: [*pagetitle*]
به دیتابیسی که مادایکس رو توش نصب کردی برو. یه جدول هست به نام site_content (البته پیشوند جدوالت به اول این کلمه اضافه میشه). این جدول مخصوص نگهداری اطلاعات صفحات سایته. یه سری ستون داره. (در نسخه های Evolution و قبلتر) اولیش id، چهارمیش pagetitle، پنجمیش longtitle، پانزدهمیش content و چیزهای دیگه است. نام هر کدوم از این ستونها رو میشه در این تگ قرار دارد و مقدارش رو چاپ کرد. اون کادری که متن و محتوای اصلی هر صفحه رو توش تایپ می کنی، نامش content هست و برای چاپش باید تگ [*content*] رو تو قالب قرار داد.
این یعنی ساختن قالب تو مادایکس چقدر باحاله! مثلا من توی قالب همین بلاگ، <TITLE> رو اینجوری درست کردم و شما داری در titlebar مرورگرت، نتیجه اش رو میبینی:
<title>[*pagetitle*] | [(site_name)]</title>متغیرهای قالب یه قابلیت خاص دیگه هم داره به نام BINDING که میشه باهاش بدون نیاز به برنامه نویسی، اطلاعاتی رو گرفت. مثلا محتوای فایلی رو چاپ کرد یا یه دستور MySQL رو اجرا کرد یا برای برنامه نویسها، یه کد کوچیک PHP رو eval کرد و چند تا کار دیگه....
چانک (Chunk)
چانک یه تیکه کد از نوع HTML هست به اضافه تگهای مادایکس. باز هم خبری از PHP نیست! برای نمایش خروجی چانکها، باید از تگ مخصوصشون استفاده بشه: {{name}}
چانک همینه و دو کاربرد اصلی داره. اول برای ذخیره یه سری کد و مرتب سازی اطلاعاته. مثلا من کدهای مربوط به کانتر این وبلاگ رو در یک چانک با نام counter قرار دادم و تگ {{counter}} رو هم به انتهای کدهای قالبم اضافه کردم. وقتی صفحه لود میشه، بجای این تگ، محتوای اون چانک در صفحه چاپ میشه. خوبیش چیه؟ خوبیش اینه که اگر من 10 تا قالب برای سایتم داشته باشم و توی همه اشون این کانتر باشه، وقتی به هر دلیلی کانتر سایتم رو عوض کنم، کافیه محتوای چانکش رو عوض کنم و نه همه قالبها رو.
یه مثل بهتر. من برای بلاگم تبلیغ میگیرم. قرار شده که تبلیغ کنار همه صفحه ها (تو قالب) باشه و وسط متن بعضی از پستها هم باشه. من اگر اشتباه کنم و کد مربوط به تبلیغات رو توی قالب و توی پستهام تایپ کنم، اگر بخوام تبلیغ رو عوض کنم یا حذفش کنم، باید همه قالبهام رو درست کنم و بدتر از اون، همه اون پستهایی که توشون تبلیغ بوده رو هم پیدا کنم و تغییر بدم.
ولی اگر این تبلیغ رو در یک چانک بذارم و توی پستها و قالب، از تگ این چانک استفاده کنم، هر وقت محتوای این چانک رو تغییر بدم، همه خروجی ها تغییر می کنه و برای حذف تبلیغ هم می تونم این چانک رو خالی کنم تا چیزی چاپ نشه، یا اسمش رو عوض کنم یا اصلا پاکش کنم. نکته خوب اینه که مادایکس برای تگهای اضافی یا غلط هیچ خطایی نمیده چون موقع ترجمه تگها، فقط اونهایی پردازش میشن که وجود داشته باشند و بقیه با هم حذف میشن.
کاربرد دیگه چانک، جایی برای ذخیره داده های HTML برای استفاده اسنیپتهاست. در این باره توی بخش Placeholderها توضیح میدم.
اسنیپت (Snippet)
اسنیپت در واقع یه اسکریپت PHP کامله که با تگهای php شروع و تمام میشه.اسنیپتها امکانات رو به مادایکس اضافه می کنند.مثلا به لینکهای کنار بلاگ من دقت کن. یه اسنیپت به نام Ditto صفحه های بلاگ من رو چک کرده و عنوان ده تای آخر رو بصورت لینک، لیست کرده یا مثلا یه اسنیپت دیگه به نام Jot وظیفه ثبت و مدیریت نظرات رو داره. خوبیش اینجاست که برای کاربرایی که برنامه نویس نیستند، استفاده از اسنیپتها خیلی ساده و استاندارده!
اسنیپت در مادایکس برای خودش دو تا تگ داره: [[name]] و [!name!]
فرقشون اینه که اولی cache میشه یعنی یکبار که اجرا شد، خروجیش توی مادایکس ذخیره میشه و دفعه های بعد دیگه اجرا نمیشه، اون خروجی ذخیره شده عیننا چاپ میشه ولی دومی هر دفعه اجرا میشه. اسنیپتهایی که فعالیتشون تکراری نیست باید بصورت uncache (دومی) استفاده بشن و اونهایی که اطلاعاتی رو چاپ می کنند که عوض نمیشه، بهتره که cached (مدل اولی) استفاده بشن. البته بروزرسانی کش سایت، همیشه از بخش مدیریت به سادگی قابل انجامه.
حالا چطور به اسنیپتها، امکانات اضافه میشه؟ سازنده هر اسنیپت که یه برنامه نویسه یه سری پارامتر برای اسنیپتش تعیین می کنه و فعالیتهاش رو بر اساس اون پارامترها انجام میده. پارامترها با علامت ? از نام اسنیپت جدا میشن.
هر پارامتر باید با علامت & شروع بشه و مقداری که بهش میدیم هم باید بعد از مساوی، داخل این علامت باشه: `
این علامت دکمه اش توی کیبورد بالای دکمه tab و کنار علامت ! قرار داره. اگه گیج شدی، ناراحت نباش، با مثال متوجه میشی.
مثلا من یه اسنیپت میسازم که عنوان صفحه رو چاپ می کنه با نام printPagetitle (آره، این کار رو با متغیر قالب pagetitle میشه کرد. گیر نده! این مثاله)
حالا تو که می خوای استفاده کنیش، اینجوری تو صفحه تگش رو قرار میدی: [[printPagetitle]] و عنوان اونجا چاپ میشه.
حالا من میگم تو می تونی رنگ خروجی رو تعیین کنی. برای دادن رنگ دلخواهت، باید از پارامتر color استفاده کنی. چرا color؟ چون عشقم کشیده اسم پارامتر این باشه! و تو اینجوری اسنیپت رو به اصطلاح call می کنی یعنی استفاده می کنی:
[[printPagetitle? &color=`blue`]]
من توی اسنیپتم، مقدار این پارامتر رو میگیرم و خروجی رو اون رنگی می کنم. حالا من میگم که اسنیپت من دو تا پارامتر دیگه هم داره که میشه این عنوان رو هر چند تا که بخوای چاپ کنی و bold هم بکنی. تعدادی که میخوای چاپ بشه رو به پارامتر number بده و اگه میخوای bold بشه، به پارامتر bold، مقدار 1 بده. مثلا:
[[printPagetitle? &color=`blue` &number=`5` &bold=`1`]]
و به این ترتیب، عنوان صفحه، 5 بار به رنگ آبی و بصورت bold چاپ میشه. اینکه چه پارامترهایی وجود داشته باشه و چه نامی داشته باشند، به کارکرد اسنیپت، عقل و شعور برنامه نویسش و عشق و علاقه برنامه نویسش بستگی داره. البته این مورد آخر، شامل نام خود اسنیپت هم میشه. حالا شاید سوال پیش بیاد که از کجا بفهمیم فلان اسنیپت چه پارامترهایی داره و هر پارامتر چه کاری انجام میده؟ جواب اینه: اون کسی که اسنیپت رو میسازه، باید پارامترها و قابلیتهاش رو هم یه جا معرفی کنه. بسته به کالیبر برنامه نویس میتونه به ترتیب در یک فایل HTML بصورت شیک و منظم بین فایلهای خود اسنیپت، در یه فایل txt قاطی بقیه فایلها و یا در اول کدهای اسنیپت در بصورت تو هم تو هم باشه. که این آخری از همه مرسوم تر هست و نشون میده که وضعیت کالیبر اکثر برنامه نویسها، یه جورایی نگران کننده می تونه باشه! می دونی چرا اینقدر راحت حرف میزنم؟ چون این پست طولانی شده، کسی عمرا تا اینجاهای مطلب رو نمی خونه. یه جورایی دارم با خودم حرف میزنم! ![]()
بگذریم. برای دریافت اسنیپتها، باید به سایت خود مادایکس رفت و اونجا داونلودشون کرد. برای نصبش هم باید همونجایی که دنبال آموزشش گشتی، دنبال نحوه نصبش هم بگردی. ولی تقریبا همیشه نحوه نصب اینجوریه که فایلهای اسنیپت رو در فولدر assets/snippets قرار میدیم (تو یه فولدر با نام همون اسنیپت). داخل فایلها یه فایل هست که کلمه "snippet" تو اسمش هست رو باز می کنیم، محتواش رو کپی می کنیم. توی بخش مدیریت مادایکس و بخش مدیریت منابع و بازم بخش اسنیپتها، یه اسنیپت جدید میسازیم با نام خود اسنیپت. اون کدهایی که کپی کرده بودیم رو هم اون وسط میریزم و ذخیره می کنیم. توی نسخه Revolution، میشه مستقیما از خود بخش مدیریت به سایت مادایکس وصل شد، اسنیپتها رو دید، سرچ کرد و با زدن یه دکمه، در سرور داونلود و نصب کرد! (چه خارجیا!)
حالا یکم درباره بعد برنامه نویسی اسنیپت برای برنامه نویسها.
وقتی پارامتری به اسنیپت اضافه میشه، یه متغیر با همون نام در اسنیپت ایجاد میشه یعنی تو مثال بالا برنامه نویس باید چک کنه (با تابع isset مثلا) که اگر متغیر bold$ وجود داشت پس این پارامتر استفاده شده و باید پردازش مخصوصش رو انجام داد یا مثلا اگر پارامتر number& استفاده شده باشه، پس توی اسنیپت متغیر number$ با مقداری که براش تعیین شده، ایجاد شده.
نکته دیگه اینکه توی اسنیپت توابع و APIهای مادایکس از طریق متغیر modx$ در دسترس هستند. همینطور اتصال با دیتابیس برقراره و نیازی به اتصال نیست. درضمن مادایکس توابعی هم برای کار با دیتابیس داره. البته کدنویسی توی نسخه Revolution متفاوت شده و امکانات خیلی گسترده تر شده.
پلاگین (Plugin)
مادایکس یه سری Event یا رویداد تعریف کرده. پلاگین ها کدهای PHP هستند که در زمان این رویدادها اجرا میشن.
پلاگین تگ نداره و فقط یه پردازشی رو انجام میده. مثلا پلاگینی برای اسنیپت جستجوی مادایکس (AjaxSearch) ساخته شده که کلمه های جستجو شده رو توی متن صفحات highlight میکنه. چجوری کار می کنه؟ قبل از چاپ خروجی، یه رویداد وجود داره. این پلاگین در این رویداد اجرا میشه و محتوای آماده چاپ صفحه رو پردازش می کنه و کلمات جستجو شده رو مثلا بین تگ <B> قرار میده.
برای نصبش مثل اسنیپت باید عمل کرد. هر اسنیپت توی معرفیش میگه که چه eventهایی لازم داره و ما باید موقع ساختن پلاگین، توی بخش رویدادها، اون eventها رو تیک بزنیم.
برای برنامه نویسها، هر پلاگین، یه اطلاعاتی رو بصورت متغیر معمولی در اختیار داره. مثلا رویدادی که درست قبل از خروج (Logout) کاربر اجرا میشه، متغیرهای userid$ (حاوی آیدی اون کاربر)، internalKey$ (بازم حاوی آیدی اون کاربر) و username$ (حاوی نام کاربری) رو داره و ما می تونیم مثلا یه جا یه چیزی از خروج کاربر ثبت کنیم یا هر کار دیگه ای.
پلاگینها طوری طراحی شده اند که هر تغییری رو میشه توی نمایش و بخش مدیریت به سادگی انجام داد. یه نمونه دیگه اینکه من پلاگینی ساخته بودم که تاریخ انتشار هر صفحه رو میشد بصورت شمسی وارد کرد، بصورت timestamp ذخیره کرد و برای نمایش هم timestamp رو شمسی چاپ کرد.
نمونه یه پلاگین که این برنامه نویس بزرگوار نوشته، پلاگین EasyLingual برای ساختن سایتهای چندزبانه با مادایکسه! ![]()
منابع مادایکس همین ها بودند ادامه شامل اصطلاحات دیگه مادایکسه...
ماژول (Module)
ماژول یه اسکریپت به زبان PHP هست که فقط توی بخش مدیریت اجرا میشه. وقتی یه ماژول نصب می کنیم یا میسازیم بعد از اینکه بخش مدیریت رو Refresh کردیم، یه دکمه به منوی ماژولها اضافه میشه. با کلیک روی اون دکمه اون ماژول اجرا میشه.
نمونه ماژول، یه ماژول خیلی گوگولی به نام JoCo هست که توسط اینجانب نوشته شده
و به مدیرهای سایت امکان میده که توی بخش مدیریت، بتونن کامنتهای ثبت شده رو مدیریت و کنترل کنند.
برای برنامه نویسها، ماژول مثل اسنیپت، به توابع و دیتابیس مادایکس دسترسی داره و برای نمایش خروجی باید اطلاعات رو Echo کنید. انگار دارید یه اسکریپت یه فایلی میسازید که توش مثلا فرم و دکمه و اطلاعات دیگه داره. البته مسلما هم توی ماژول، هم توی اسنیپت و هم توی پلاگین میشه فایل include کرد و افزونه رو دسته بندی کرد.
Placeholder
Placeholder یه نوع از تگ توی مادایکس هست که به تنهایی هیچ کاری نمی کنه و فقط مورد استفاده اسنیپتهاست. شیوه استفاده اش اینجوریه: [+name+]
مثلا اگر تو یه صفحه فلان اسنیپت رو قرار بدیم، Placeholderهای اون اسنیپت فعال میشن. Ditto اسنیپتی هست که اطلاعات صفحات سایت رو بازیابی می کنه. میشه باهاش بلاگ ساخت (مثل همینجا). این اسنیپت یه Placeholder داره به نام next که اگر نحوه نمایش بصورت صفحه صفحه باشه، بجای تگ [+next+] تو صفحه، لینک صفحه بعدی چاپ میشه. نمونه زنده اش homepage همین وبلاگه. پایین صفحه که شماره صفحات هست، از این Placeholder استفاده شده. همین.
به عبارت ساده تر، سازنده اسنیپت میگه من چهار تا Placeholder دارم با این نامها که این مقادیر بجاش چاپ میشه. حالا اگر دوست داری هر کدوم از این مقادیر رو چاپ کنی، Placeholderاش رو تو صفحه قرار بده تا من با مقدار عوضش کنم.
توی توضیح چانک گفتم که یه کاربرد چانک توی قالبسازی برای اسنیپتهاست. اگر تا اینجای مطلب رو خونده باشی متوجه خواهی شد.
اسنیپتهایی که چیزی تو صفحه چاپ می کنند چون خروجی باید HTML باشه، پس اطلاعات رو توی تگهای HTML باید بذارند و چاپ کنند. حالا بعضی هاشون این امکان رو میدن که این تگهای HTML و یا کدهای حاشیه ای رو کاربر تعیین کنه. مثلا به لینکهای کنار همین بلاگ توجه کن. اسنیپتی به نام Ditto اطلاعات لینکها رو بازیابی می کنه و از من میخواد که تعیین کنم چطور اطلاعات چاپ شه. توی آموزش این اسنیپت گفته که چانک بساز، کدت رو توش قرار بده و از این Placeholderهایی که میگم توش استفاده کن. من (Ditto) این چانک رو به ازای هر مورد چاپ می کنم. کافیه بعد از ساختن چانک، اسم چانک رو به پارامتر tpl& من بدی.
Placeholderهایی که Ditto معرفی کرده، همون نامهایی هست که میشه توی تگ [*name*] قرار داد. یعنی [+pagetitle+] عنوان صفحه جاش چاپ میشه. برای اینکه بهتر متوجه شی، همین لینکهای کنار بلاگ، قالبش شبیه اینه:
<a href="index.php?id=[+id+]">[+pagetitle+]<a><br />
Ditto به ازای هر تیکه ای که باید چاپ شه، این قالب رو از چانکش میگیره، تگهای توش رو ترجمه می کنه و چاپ می کنه یعنی لینکهای کنار سایت من، 10 بار این قالب رو چاپ کرده. به homepage سایت من برو. پستهای من رو میبینی که زیر هم لیست شدند. اون هم با Ditto چاپ شده ولی قالبش متفاوته. اینجا قالب یه لینک ساده است ولی اونجا قالبش چند تا DIV هست که خلاصه مطلب رو چاپ می کنه. عنوان و تاریخ رو بالاش نمایش میده و غیره. اونجا هم ده بار تکرار شده. (امیدوارم متوجه شده باشی چون به نظر خودم یکم پیچیده توضیح دادم!)
تگ لینک
مادایکس یه تگ داره که آیدی صفحه رو میگیره و URL معتبر چاپ می کنه و به این شکله: [~docID~]
مثلا یه صفحه داریم که ID اون 5 هست و میخوایم تو یه صفحه دیگه بهش لینک بدیم. در تگ <A> باید مقدار [~5~] رو به HREF لینک بدیم تا URL به صفحه 5 تولید شده.
نکته خوب این تگ اینه که لینکش معتبره. حالت پیش فرض آدرسهای مادایکس به این شکله: index.php?id=docID ولی میشه از آدرسهای دوستانه (Friendly URLs) استفاده کرد (مثل همین بلاگ). حالا وقتی این تگ میخواد ترجمه شه، اگر آدرسهای دوستانه فعال باشه، URL هم همونجوریه و اگر فعال نباشه به شکل پیش فرضه.
کاربرد جالبش وقتیه که تگهای مادایکس رو تودرتو استفاده می کنیم مثلا اگر بخوایم توی قالب، یه لینک به صفحه جاری درست کنیم اینجوری می تونیم داشته باشیم: [~[*id*]~]
وقتی ما داریم مثلا صفحه با آیدی 23 رو لود می کنیم، [*id*] مقدار 23 رو چاپ می کنه و تگ به این شکل میشه: [~23~] و این هم به URL صفحه 23 تبدیل میشه. اگر توضیح Placeholder رو خونده باشی، من برای اینجا لینک از index.php تو URL استفاده کردم که حالا میشه اینجوری مقدار HREF اونجا رو تغییر داد:
<a href="[~[+id+]~]">[+pagetitle+]<a><br />
این تگ یه کاربرد مهم دیگه هم داره. موقع ساخت یا ویرایش یک پرونده (صفحه)، فیلدی به نام مشخصه های لینک یا Link Attributes وجود داره. توی این فیلد میشه attributeهایی که میخوایم به لینکهای این صفحه اضافه بشه رو وارد کرد. مثلا می تونیم تعیین که عبارت "class="someCSSclass به همه لینکهایی که آدرس این صفحه رو دارند اضافه بشه. یا مثلا با "target="_blank مشخص کنیم که همه لینکهای به این صفحه، توی پنجره یا تب جدید باز بشن که اضافه شدن این attributeها، موقعی برای لینکهای عادی انجام میشه که بجای آدرس مستقیم، با این تگ لینک داده باشیم.
تگ تنظیمات
توی بخش تنظیمات مادایکس اطلاعاتی وجود داره که مهمترینهاش نام سایت، URL سایت و مسیرهای سایته. با این تگ میشه اون اطلاعات رو چاپ کرد. شیوه استفاده اش به این شکله: [(name)]
مثلا عبارت site_name همونطور که قبلا گفته بودم، نام سایت رو چاپ می کنه و کافیه توی قالب یا صفحات این تگ رو قرار بدیم: [(site_name)]
این کدیه که من توی تگ <TITLE> بلاگم گذاشتم:
<title>[*pagetitle*] | [(site_name)]</title>که خروجیش رو توی titlebar مرورگرت داری میبینی.
تگ های Timer
مادایکس یک تگ دیگه هم برای چاپ اطلاعات پردازشی صفحات داره که شامل همین چهارتاست:
[^q^] : تعداد کوئری های دیتابیس
[^qt^] : زمان کوئری های دیتابیس
[^p^] : زمان پردازش کدهای PHP
[^t^] : زمان کل پردازش
گروه کاربران (Web Group, User Group)
کاربرانی که توی سایت ثبت نام می کنند رو میشه دسته بندی کرد هم کاربران مدیریت و هم کاربران وب. فایده اش اینه که میشه امکانات و محدودیتهایی رو برای مجموعه ای از کاربران به سادگی فراهم کرد.
شیوه های تعیین دسترسی توی نسخه Revolution تغییر کرده.
گروه پرونده (Document Group)
در مادایکس امکان گروه بندی صفحات هم وجود داره. وظیفه اصلی این ویژگی، تعیین سطح دسترسی برای پرونده هاست. مثلا میشه تعیین کرد که فقط فلان گروه کاربری به فلان گروه پرونده دسترسی داشته باشند. اگر کاربری به پرونده ای در گروه کاربری ای دسترسی نداشته باشه، به صفحه خطای مادایکس منتقل میشه و اگر دسترسی در بخش مدیریت باشه، مدیری که به پرونده ای دسترسی نداشته باشه، فقط فعالیتهایی که براش تعیین شده رو می تونه رو اون پرونده اعمال کنه. حتی میشه کاری کرد که مدیر محدود، پرونده های ممنوعه رو منوی درختی مادایکس نبینه.
شیوه های تعیین دسترسی توی نسخه Revolution تغییر کرده.
نقشها (Roles)
نقش برای تعیین دسترسی مدیرها به بخشهای میدیریت مادایکسه. مثلا نقشی که نتونه صفحه جدید بسازه یا نقشی که نتونه صفحه ای رو منتشر کنه یا حذف کنه یا به بخش کاربرها وارد بشه و غیره. شما یه نقش خاص میسازی و موقع ساختن یه اکانت مدیر، میتونی انتخاب کنی که چه نقشی داشته باشه. مدیری که مثلا به ماژولها دسترسی نداره، حتی لینکش رو هم توی منوها نمی بینه.
وب لینک (Weblink)
وب لینک یه آدرس اینترنتیه که بصورت صفحه های مادایکس ذخیره میشه. وب لینک فقط به این درد میخوره که اسنیپتها و سایر ابزارها، باهاش مثل پرونده برخورد می کنند. مثلا وقتی اسنیپتی از صفحات سایت، منو تهیه می کنه، می تونه آدرس وب لینک رو هم مثل یه پرونده توی منو قرار میده.
Cache مادایکس
مادایکس صفحه هاش و منابعش رو توی فایلهای PHP ذخیره می کنه و موقعی که اطلاعات مورد نیاز توی این فایلها باشه، از همون فایلها میخونه. در غیر اینصورت به دیتابیس مراجعه می کنه.
وقتی صفحه ای رو میسازیم یا ویرایش می کنیم. گزینه ای برای کش شدن صفحه داریم که اگر فعال باشه، محتوای اون صفحه ذخیره میشه. اسنیپتهایی که بصورت Uncached فراخوانی شدند، ذخیره نمیشن و هر بار اجرا میشن.
نسخه های Evolution و قبلتر مادایکس، در زمینه کش اطلاعات یه محدودیت داره که نمی گم چیه!
برای اینکه مطلب خیلی دیگه کامل بشه. چند تا چیز دیگه هم بگم که اگر توی فروم اصلی بری، به چهار تا کلمه tv و tpl و Front-end و Back-end برمیخوری که زیاد استفاده میشه. tv همون متغیر قالبه(مخفف Template Variable) و tpl یعنی قالب برای خروجی. یعنی همون قالبی که با چانک (یا فایل یا هر جور دیگه ای) برای اسنیپت ساخته میشه و اون دو تا به ترتیب به بخش نمایش سایت یعنی چیزی که بازدیدکننده ها میبینند گفته میشه و بعدی هم به بخش مدیریت میگن.
درباره Evolution و قبلتر که تو مطلب بهش اشاره کردم. مادایکس یه نسخه کامل داره که با 0.9 شروع شد و به 0.9.6.3 ختم شد. این نسخه ها کامل شد به نسخه 1.0.0 تبدیل شد و نام Evolution رو براش انتخاب کردند. نسخه 2.0.0 مادایکس، که نامش Revolution هست. از اول برنامه نویسی شده، امکانات خیلی خاص و جالبی بهش اضافه شده، بهینه شده و فعلا در حالت beta قرار داره. برای استفاده، فعلا Evolution مناسبتره. هر دو نسخه رو میشه از بخش داونلود سایت دریافت کرد. تمام تگهایی که اینجا معرفی کردم، توی نسخه Revolution شکلش تغییر کرده. مثلا Placeholder به این شکل شده [[name+]].
پست مرتبط: معرفی سیستم مدیریت محتوا و فریم ورک مادایکس
به امید روزی که هر کسی صاحب یک دستگاه مادایکس باشه و هر روز بعد از ظهر با زن و بچه اش بیاد تو فروم مادایکس هواخوری!


امیرحسینم. اسمم رو دوست دارم، خودم رو دوست دارم. ساکن تهرانم. دانشجوی رشته صنایع هستم شغل درست و حسابی ندارم. طراحی وب می کنم ولی همه اش واسه سرگرمی بوده. برنامه نویس PHP هستم. برنامه نویسی و وقت گذرونی با کامپیوتر تنها کاریه که خسته ام نمی کنه.
تو چی فکر می کنی؟