سلام به همه من می خواهم دوچرخه دیگری را که با زبان PHP نوشته شده است را ارائه دهم شیء سندمدل. چه تفاوتی با سایر نمایندگان سه چرخ از همان گونه دارد؟ در واقع، تفاوت های زیادی وجود ندارد، بهترین های بسیاری را با هم ترکیب می کند. مثلا:
1. جداسازی کامل html و php.
2. بدون برچسب اضافی در الگوهای مانند
3. امکان جاسازی محتوای فایل های قالب دیگر در طرح، هم از php و هم با استفاده از تگ مخصوص در طرح.
4. امکان ایجاد هر تگ html در پرواز.
5. قابلیت ذخیره در فایل htmlهر چیزی که تولید و جمع آوری شد.
6. بررسی وجود فایل html صفحه درخواستی قبل از تولید قالب.
برای اینکه فوراً برای همه روشن شود که استفاده از آن چقدر راحت و آسان است، می گویم و نشان می دهم که چگونه از آن برای ایجاد یکی از پروژه هایم استفاده کردم (من گمان می کنم که همه پروژه هایم را برای آن بازنویسی کنم).
اولین کاری که معمولا انجام می دهم این است که تمام اطلاعات مربوط به صفحه را از پایگاه داده ( کلید واژه ها، توضیحات صفحه، نام قالب و آدرس فایل css و js). من همه اینها را در آرایه سر $ ذخیره می کنم. سپس محتوا را از پایگاه داده دریافت می کنم و آن را در آرایه صفحه $ ذخیره می کنم. و من شروع به کار با کلاس می کنم.
بنابراین، ابتدا سازنده کلاس را فراخوانی می کنم و تمام پارامترهای مورد نیاز را در آن قرار می دهم:
$ tpl = قالب جدید. $ tpl -> ext = TPL_EXTENSION; # پسوند فایل ها در دایرکتوری الگو $ tpl -> htm = CACHE_EXTENSION; # پسوند برای صفحاتی که قبلا ایجاد شده اند $ tpl -> skin_dir = DIR_TEMPLATES; # دایرکتوری حاوی همه الگوهای سایت (مثلاً الگوها) $ tpl -> js_dir = DIR_JS; # دایرکتوری که در آن باید به دنبال فایل های JS بگردید $ tpl -> css_dir = DIR_CSS; # دایرکتوری که CSS در آن قرار دارد $ tpl -> img_dir = DIR_IMG; # دایرکتوری که در آن تصاویر $ tpl -> skin = $ _SESSION ["skin"]; # نام قالبی که می خواهم از $ tpl استفاده کنم -> cache = DIR_CACHE; # محل ذخیره html تمام شده $ tpl -> log = FILE_T_LOGS; # محل نوشتن گزارشها $ tpl -> tag_start = SYMBOL_START_TAG; # کاراکتری که متغیرهای قالب با $ tpl -> tag_end = SYMBOL_END_TAG شروع میشوند. # کاراکتری که به متغیرهای قالب پایان میدهد $ tpl -> dir_delimeter = DIRECTORY_SEPARATOR; $ tpl -> space = SYMBOL_SPACE; # کاراکتر جایگزین فاصله.
Fuf، مانند همه متغیرها، اجازه دهید به جلو برویم.
برای اینکه کلاس را مجبور به انجام کارهای غیر ضروری نکنیم، ابتدا بررسی می کنیم که آیا از قبل یک فایل Html آماده از صفحه درخواستی داریم یا خیر.
if ($ tpl -> TestPageStatus () === TRUE) (نیاز به $ tpl -> cacheFileName;) else ($ tpl -> صفحه ("index")؛ # نام فایل الگو را ارسال کنید، به هر حال، شما می تواند چندین مورد از آنها را منتقل کند، که با کاما از هم جدا شده اند $ tpl -> assign ("HEAD"، $ head)؛ $ tpl -> assign ("CONTENT"، $ page)؛ $ tpl -> build ()؛ # دستور را به الگوی $ tpl -> ShowPage (); # خروجی را بسازید.)
در اینجا تمام روش هایی که برای نمایش صفحه باید استفاده کنید آورده شده است.
حال بیایید به چند روش مفید دیگر از این کلاس نگاه کنیم. فرض کنید که ما قبلاً هر آنچه را که نیاز داریم به کلاس منتقل کرده ایم، اما هنوز به آن دستوری برای خروجی نداده ایم، زیرا ناگهان به یاد آوردیم که باید چندین تگ Html در قالب ایجاد کنیم. انجام این کار نیز بسیار آسان است. ابتدا باید بلوکی را پیدا کنیم که می خواهیم چیزی در آن اضافه کنیم. شما می توانید آن را به 2 روش پیدا کنید:
$ tpl -> findById ("findMe"); $ tpl -> findByTagName ("div");
متد findById به طور منطقی فرض میکند که همه شناسههای برچسب در قالب منحصربهفرد هستند. و متد findByTagName اولین مورد منطبق را برمی گرداند.
باید نتیجه ای را که با جستجو به دست آوردیم به متد $ tpl -> createChild () منتقل کنیم تا بتوانیم تگ های فرزند را در عنصر یافت شده ایجاد کنیم. متد createChild اتفاقاً بعد از ایجاد یک عنصر جدید، آن را به ما برمی گرداند تا بتوانیم از عنصر جدید ایجاد شده در جای دیگری استفاده کنیم.
با گشتن و آزمایش، 3 راه برای ایجاد برچسب در یک الگو پیدا کردم، بنابراین 3 مثال را همزمان به شما نشان خواهم داد. مثال 1:
ما باید ایجاد کنیم
داخل$ پدر = $ tpl -> findById ("والد"); $ tpl -> createChild ($ پدر، "div"، "id = فرزند، کلاس = تست");
ما گرفتیم:
مثال 2:
ما باید ایجاد کنیم
$ پدر = $ tpl -> findById ("والد"); $ tpl -> createChild ($ والد، "div"، "id = فرزند، کلاس = تست"، "برخی متن");
ما گرفتیم:
مثال 3:
ما باید ایجاد کنیم
$ پدر = $ tpl -> findByTagName ("span"); # (1) $ tpl -> createChild ($ پدر، "div"، "Element جدید"); # (2)
(1) جستجوی والدین نه با شناسه، بلکه با برچسب، اولین مورد منطبق را پیدا می کند
(2) اگر به ویژگی ها نیاز نداشته باشیم، بلکه فقط به مقدار عنصر جدید نیاز داشته باشیم، می توان آنها را حذف کرد.
ما گرفتیم:
و بعد از این دستکاری ها، من از قبل با ShowPage تماس گرفتم. و در اینجا به 2 نکته جالب دیگر می رسیم.
حالتی را تصور کنید که ما یک الگو داریم، فرض کنید یک الگوی list.tpl با لیستی از مثلاً تلفن های همراه است:
(CONTENT.Brand)
(CONTENT.Model)
(CONTENT.Info)اگر اطلاعات را فقط از طریق 1 تلفن ارسال کرده باشیم، متغیرها به سادگی با مقادیر آنها جایگزین می شوند، و اگر اطلاعات را از طریق چندین تلفن به طور همزمان ارسال کنیم، کلاس به تعداد دفعاتی که انواع مقادیر به آن رسیده است، این بخش را کپی می کند. آی تی. و او خودش این کار را انجام خواهد داد، برای مثال، بر خلاف کلاس xTemplate که برای هر مقدار تخصیص و تجزیه داشت.
درست است، یک لحظه نه چندان راحت وجود دارد، اگر بعد از این بلوک برخی دیگر وجود داشته باشد، به عنوان مثال:
(CONTENT.Brand)
(CONTENT.Model)
(CONTENT.Info)سپس در چنین شرایطی مجبور خواهیم شد با بسته بندی تلفن همراه خود از یک ترفند کوچک استفاده کنیم
(CONTENT.Brand)
(CONTENT.Model)
(CONTENT.Info)در این صورت تمام گوشی های موبایل یکی پس از دیگری در داخل ظاهر می شوند ، و "بلاک دیگری" در زیر باقی خواهد ماند.
و اگر چیزی را فراموش نکرده باشم، آخرین لحظه اضافه کردن محتوای قالب های دیگر به قالب فعلی است.
من دوباره به تخیل شما متوسل می شوم.
تصور کنید که طراح صفحهآرایی میخواهد محتویات فایل page.html به بلوک فایل list.html اضافه شود، برای این کار او در جای مناسب در فایل list.html اضافه میکند.
تعداد این درج ها محدود نیست و مکان آنها مطلقاً حیاتی نیست، بنابراین می توانید آنها را به دلخواه و در هر مقداری درج کنید.
احتمالاً همین است، اگر چیزی به یاد آوردم، به شما اطلاع خواهم داد. ممنون که تا آخر خواندید
برچسب ها: php، کلاس، قالب، موتور قالب، تجزیه کننده
پس از خلقت اطلاعات-file، در اصل، موضوع قبلاً تعریف شده است. یعنی می توانید به بخش مدیریت تم ها بروید http://mysite.ru/admin/build/themesو موضوع خود را در آنجا قرار دهید. به طور طبیعی، پس از روشن کردن آن، هیچ طرحی را مشاهده نخواهید کرد - صفحه به سبک "سیاه روی سفید" - متن سیاه در پس زمینه سفید به خود می گیرد.
با این حال، من می خواهم توجه داشته باشم که با وجود این واقعیت که در موضوع ما هیچ فایلی به جز وجود ندارد mytheme.infoدروغ نمی گوید، سایت به همان روش قبلی کار خواهد کرد - نمایش تمام محتوا، اضافه کردن بلوک به مناطق ( http://mysite.ru/admin/build/block) و غیره. این به دلیل این واقعیت است که هسته دروپال شامل می شود ماژول های مورد نیاز، که حتی در صورت عدم وجود هیچ فایلی در موضوع شما (به استثنای فایل اطلاعات)، به شما امکان می دهد به کار با دروپال ادامه دهید.
در اصل، تمام ایجاد الگو به فایلهای الگوی همپوشانی کاهش مییابد (آنها پسوند دارند tpl.php) ماژول های استاندارد ما CMS.
مهمترین فایل tpl (tpl کوتاه شده است قالب، الگو) است page.tpl.php... او مسئول ساخت هر صفحه از سایت است. بیایید ببینیم فایل قالب از چه چیزی تشکیل شده است:
- کد html
- کد php
- کد جاوا اسکریپت(لازم نیست)
دروپال داده های سایت را در قالب متغیرهای استاندارد به هر فایل قالب منتقل می کند. برای هر فایل قالب 2 نوع متغیر وجود دارد:
- متغیرهایی که فقط به این فایل ارسال می شوند
- متغیرهایی که به همه فایل ها ارسال می شوند
در اینجا لیستی از تمام متغیرهای مربوط به آن وجود دارد page.tpl.php:
متغیرهای رایج (برای همه فایل ها):
- مسیر_پایه $- مسیر پایه که دروپال در آن نصب شده است
- $ css- آرایه ای از فایل های css متصل به فایل قالب فعلی
- دایرکتوری $- مسیر پوشه ای که تم در آن نصب شده است
- $ is_front- اگر در صفحه اصلی هستید، TRUE را برمی گرداند
- $ loged_in- اگر وارد سیستم شده باشید، TRUE را برمی گرداند
- $ is_admin- اگر به پنل مدیریت دسترسی دارید، TRUE را برمی گرداند
فراداده صفحه
- زبان $- (یک شی) زبان فعلیکه در سایت نمایش داده می شود
- زبان $-> زبان- حاوی نمایش متنی آن است
- $ language-> dir- حاوی جهت زبان است. یا "ltr" (از چپ به راست) یا "rtl" (راست به چپ) خواهد بود.
- $ head_title- نسخه اصلاح شده عنوان صفحه، برای استفاده بین برچسب ها
- سر دلار- بین تگ ها درج شده است ... حاوی متا تگ ها، کلمات کلیدی و غیره است.
- سبک های $- در خدمت دانلود همه css-فایل ها به صفحه فعلی
- اسکریپت های $- در خدمت دانلود همه جاوا اسکریپت "sبه صفحه فعلی
- $ کلاس های بدن- مجموعه ای از کلاس ها cssبرای برچسب ... این شامل اطلاعاتی در مورد مکان فعلی ستون ها در سایت، تعداد آنها، آدرس فعلی "e" و غیره است.
اطلاعات در مورد سایت
- صفحه اول $- آدرس صفحه اصلی سایت. بهتر است از این متغیر برای اشاره استفاده کنید صفحه نخستاز آنجا که این شامل زبان و پیشوند دامنه است
- لوگوی $- مسیر رسیدن به لوگوی سایت، در صورتی که در سایت درج شده باشد
- $ site_name- نام سایت. اگر آن را در ویژگی های فایل اطلاعات غیرفعال کنید، ممکن است خالی باشد. قابل تنظیم در mysite.ru/admin/settings/site-information
- $ site_slogan- شعار سایت. اگر آن را در ویژگی های فایل اطلاعات غیرفعال کنید، ممکن است خالی باشد. قابل تنظیم در mysite.ru/admin/settings/site-information
- ماموریت دلار- ماموریت سایت اگر آن را در ویژگی های فایل اطلاعات غیرفعال کنید، ممکن است خالی باشد. قابل تنظیم در mysite.ru/admin/settings/site-information
جهت یابی
- $ search_box- حاوی کد html است که رشته جستجو را نمایش می دهد. اگر آن را در فایل اطلاعات خاموش کنید ممکن است خالی باشد
- پیوندهای اولیه $
- پیوندهای ثانویه $- آرایه ای حاوی پیوندهای ناوبری برای سایت، در صورتی که در ویژگی های فایل اطلاعات مجاز باشند
محتوای صفحه پیش فرض
- دلار باقی مانده است- منطقه حاوی کد html برای ستون سمت چپ است. اگر هر منطقه ای را در فایل اطلاعات مشخص کنید، ناپدید می شود
- دلار خرده نان - "پودرهای سوخاری" برای صفحه فعلی
- عنوان $- عنوان صفحه
- $ کمک کند- نکات پویا، بیشتر در پنل مدیریت نشان داده شده است
- پیام های $- نمایش پیام هایی در مورد خطاها و هشدارها در سایت
- زبانه های $- پیوندها (برگه ها) که صفحه فعلی را با صفحات فرعی آن مرتبط می کند (به عنوان مثال، برای یک مقاله - با صفحه ویرایش آن)
- محتوای $- محتوای صفحه فعلی
- دلار درست است- منطقه حاوی کد html برای ستون سمت راست است. اگر هر منطقه ای را در فایل اطلاعات مشخص کنید، ناپدید می شود
ناحیه پایین / داده های پوششی
- $ feed_icon- خط با تمام آیکون ها بازخوردبرای صفحه فعلی
- $ footer_message- پیام در انتهای صفحه قابل تنظیم در mysite.ru/admin/settings/site-information
- پاورقی $- منطقه حاوی کد html برای پایین صفحه است. اگر هر منطقه ای را در فایل اطلاعات مشخص کنید، ناپدید می شود
- $ بسته شدن- برچسب بستن برای همه ماژول هایی که صفحه را تغییر داده اند. این متغیر باید بعد از تمام محتوای پویا نمایش داده شود. بهتر است قبل از بستن تگ BODY
همه در اینجا ذکر شده است متغیرهای استاندارد... اما می توانید متغیرهای خود را در اینجا یا به صورت منطقه ای از طریق اضافه کنید اطلاعات-file یا در هر نقش دیگری از طریق فایل template.php(درباره او کمی بعد).
حالا به شما نشان خواهم داد که چه کدی باید باشد page.tpl.phpو سپس به چه کدی توسط مرورگرها تفسیر می شود. در اینجا یک قطعه کد از page.tpl.php:
خط اول بررسی می کند که آیا صفحه فعلی اصلاً عنوان دارد یا خیر. اگر وجود نداشته باشد، دیباگر به سادگی از این کد عبور می کند و آن را وارد نمی کند. اگر عنوان وجود داشته باشد، تگ به کد html صفحه اضافه می شود
، پس از آن عنوان صفحه چاپ می شود و همه اینها با برچسب بسته می شود
... اگر به کد این صفحه در یک مرورگر نگاه کنید، به شکل زیر است:
درس 4. فایل های مورد نیاز برای ایجاد یک الگو Page.tpl.php
تقریباً همه متغیرهای سایت به این ترتیب پیچیده می شوند. این کار به این منظور انجام می شود که بتوانیم محتوا را بدون اینکه از قبل بدانیم چه خواهد بود، استایل بندی کنیم.
اینطور به نظر می رسد فایل استاندارد page.tpl.phpکه همراه دروپال است. نام کلاس ها را تغییر دهید، متغیرها را مرتب کنید - و ببینید چه اتفاقی می افتد. این برای "احساس" نحوه عملکرد و آنچه در نتیجه نمایش داده می شود ضروری است.
"- // W3C // DTD XHTML 1.0 Strict // EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "http://www.w3.org/1999/xhtml" xml: lang = "زبان؟>"لنگ = "زبان؟>" dir = "کارگردان؟>">
"title=" (! LANG:"rel =" home ">چاپ $ site_name; ?>
جدا کردن منطق دریافت داده ها از منطق نمایش آنها بخش بسیار مهمی از توسعه وب است.
هر برنامه نویسی که اندکی از سطح "Hello world" بالاتر رفته باشد، شروع به احساس نیاز به چنین جدایی می کند. اما همه به نتیجه گیری و تصمیم درست نمی رسند.
بنابراین، در اینجا مهمترین قوانین وجود دارد:
1. کد دریافت کننده و کد نمایش داده ها باید از هم جدا شوند.
2. هر خروجی باید تنها پس از آماده شدن همه داده ها برای آن شروع شود.
3. در نتیجه، هر اسکریپت فقط باید با پردازش داده ها سر و کار داشته باشد. پس از آن، او می تواند نوعی هدر HTTP ارسال کند، یا قالب را فراخوانی کند، داده های آماده شده را ارسال کند، یا هر دو با هم.
4. از کدام موتور قالب استفاده شود دهمین مورد است. ساده ترین و در دسترس ترین آن خود PHP است، بنابراین مثال هایی در مورد آن ارائه خواهد شد.
توهمات
احتمالاً هیچ موضوعی در برنامه نویسی وب وجود ندارد که به اندازه قالب ها واضح و غیرقابل درک باشد. همه دیر یا زود به این نتیجه می رسند که استفاده از قالب ها ضروری است. اما بنا به دلایلی از طریق وحشیانه ترین توهمات و خیالات به وجود می آید.
ساده ترین و واضح ترین تصور اشتباه این است که مبتدیان یک فایل "طراحی" را که یک html رایج برای تمام صفحات یک سایت است، به عنوان یک الگو می نامند. و در این مورد آرام می شوند. اطلاعات پویا، هیچ تردیدی وجود ندارد، نمایش پژواک قدیمی خوب :-)
در واقع موتور قالب عمدتاً به نمایش محتوای در حال تغییر صفحات سایت می پردازد. و نتیجه گیری "طراحی" یک کار ثانویه است.
دو فانتزی اصلی وجود دارد:
1. "طراح" به قالب هایی نیاز دارد تا بتواند آنها را بدون نیاز به درک PHP ویرایش کند.
2. از این رو، قالب ها برای جدا کردن PHP از HTML استفاده می کنند.
بیایید سعی کنیم در مورد جمله اول فکر کنیم. طراح چیست؟ این شخصی است که در فتوشاپ کار می کند. او اغلب اصلا HTML نمی داند. و یا یک طراح چیدمان خاص یا - اغلب ... خود برنامه نویس - روی قالب کار می کند! خنده دار است، اینطور نیست؟
در حال حاضر نتیجه، در مورد جداسازی PHP از HTML. خوب. ما هدف مقدس جدایی را پیش روی خود داریم. بنابراین، ما به اسمارتی می رسیم و می نویسیم:
(کلید foreach = مورد cid = con from = $ مخاطبین)
($ con.name) - ($ con.nick)
(/ برای هر)
حتی خنده دار تر.
«طراحی» که همه چیز برایش شروع شده بود از خوشحالی غش می کند.
تئوری
به نظر می رسد که دلایل ما برای استفاده از قالب ها ارزش یک پنی را ندارد. و اکنون چه - آیا به طور کلی به الگوها نیازی ندارند؟ مورد نیاز است. اما ابتدا باید به این سوال پاسخ دهید - "چرا؟" برای چینیاز به قالب و با تمرین جواب را بررسی کنید. من بارها این سوال را از مردم پرسیده ام. اما تقریباً هیچ کس نمی تواند به آن پاسخ دهد. چرا او به الگوها نیاز دارد. معلوم می شود که مردم کاری را بدون اینکه بدانند چرا انجام می دهند.
این خنده دارترین چیز است.
در طول مدت تصدی خود به عنوان یک برنامه نویس وب، سه دلیل را برای خودم فرموله کردم که چرا شخصاً به قالب نیاز دارم. در واقع، دو مورد از آنها وجود دارد. و در نهایت به یک چیز برسیم:
یک کد - چندین نمایش.
اغلب اتفاق می افتد که به جای یک اطلاعات، باید اطلاعات دیگری را نشان دهید. به عنوان مثال کد کار با پایگاه داده به جای متن خبر یک پیام خطا دریافت می کند. در این مورد، به جای یک صفحه خبری، باید صفحه کاملا متفاوتی را نشان دهید - با عذرخواهی و درخواست برای بازگشت بعدا. انجام این کار با قالب ها بسیار آسان است.
اغلب باید همان اطلاعات به چندین شکل نشان داده شود. مثلاً یک صفحه معمولی و یک صفحه چاپی. اطلاعات یکسان، کد دریافت آن یکسان و کد خروجی متفاوت است. در مواجهه با چنین شرایطی می توانید خیلی سریع کد خود را به دو قسمت تقسیم کنید که یکی از آنها وظیفه خروجی را بر عهده دارد و قسمت دوم پاسخگو نیست. مثال دیگر: فرض کنید میخواستیم اطلاعات را نه مستقیماً به HTML، بلکه از طریق یک درخواست AJAX با فرمت JSON خروجی دهیم. اگر از موتور قالب استفاده کنیم، دقیقاً یک خط در کد خود را تغییر می دهیم - موتور الگو را به فراخوانی json_encode () فراخوانی می کنیم. و اگر خروجی ما با کد دریافت داده مخلوط شد، پس کل کد باید بازنویسی شود!
وضعیت تا حدودی مشابه است: فرض کنید اسکریپت ما در دو سایت است. به علاوه یک نسخه در محل ما. و بنابراین ما یک اشکال بزرگ در خانه پیدا کردیم. آن را ببند حال باید کدهای موجود در سایت ها را به روز کنیم. و اینجاست - لحظه حقیقت: اگر از الگوها به درستی استفاده شده باشد، ما به سادگی کد را در هر دو سایت آپلود می کنیم، و همه چیز به کار خود ادامه می دهد، گویی هیچ اتفاقی نیفتاده است! این وضعیت، به نظر من، یک آزمون ایده آل برای رویکرد انتخاب شده برای الگوسازی است.
نکته مهم دیگری که بسیاری از افراد از آن غافل می شوند (در استدلال نظری خود، در حالی که دائماً در عمل با آن مواجه می شوند!) - ترتیب اجرای اسکریپت همیشه با ترتیب خروجی در قالب مطابقت ندارد... مثال کتاب درسی - نمایش عنوان مقاله در تگ
همچنین باید به خاطر داشت که علاوه بر متن PHP، اسکریپت ها هدرهای HTTP را نیز نمایش می دهند. که باید قبل از هر متنی یا حتی به جای متن به طور کلی نمایش داده شود (اگر مثلاً بخواهیم کاربر را به صفحه دیگری هدایت کنیم). اگر ابتدا منطق برنامه را بدون نمایش چیزی پیاده سازی کنیم، صدور هدر HTTP مورد نیاز مشکلی برای ما ایجاد نمی کند.
ممکن است دلایل خود را برای استفاده از قالب ها داشته باشید. اما تنها با یک شرط - این دلایل باید ناشی از یک ضرورت واقعی و حیاتی باشد و نه ناشی از "ملاحظات بالاتر" و نگرانی برای برخی افراد ناشناس.
تمرین
حالا بیایید از تئوری به عمل برویم.
در ساده ترین حالت، در نمایش هر صفحه ای، همیشه دو قالب خواهیم داشت: یک قالب کلی سایت و یک قالب محتوایی برای یک صفحه خاص.
فرض کنید می خواهیم صفحه ای با لینک به سایت های دوستان بسازیم.
در این حالت کد ساده شده به صورت زیر خواهد بود:
خود فایل links.php. خروجی هیچ چیز. فقط داده ها را آماده می کند و سپس قالب را فراخوانی می کند.
// تنظیمات را فعال کنید.
شامل "settings.php";
// داده ها را از پایگاه داده دریافت کنید، متغیرها را تعریف کنید
$ pagetitle = "(! LANG: پیوندها"
;!}
$ DATA = $ db -> getAll ("SELECT * FROM links");
// قالب صفحه را تنظیم کنید و قالب کلی سایت را فراخوانی کنید
$ tpl = "tpl_links.php";
شامل "tpl_main.php";
الگوی عمومی (tpl_main.php):
include $tpl ?>
در جای مناسب، قالب صفحه ما (tpl_links.php) در آن گنجانده شده است:
=$pagetitle?>
- "target =" _ blank ">=$row [ "name" ] ?>
foreach($DATA as $row ): ?>
endforeach ?>
ساده ترین راه این است که الگوهایی را بر اساس صفحات استاتیکی که قبلاً در HTML تنظیم شده اند ایجاد کنید. بیایید ایجاد و اتصال یک الگو را با استفاده از یک مثال در نظر بگیریم. فرض کنید از قبل یک فایل HTML با محتوای زیر دارید:
<html> <سر> <نام متا = "شرح"محتوا = /> <نام متا = "کلید واژه ها"محتوا = /> <عنوان>عنوان> <لینک href = "style.css" rel = "شیوه نامه"نوع = "متن / css" /> سر> <بدن>// منوی شروع<حاشیه جدول = "1" > <tr> <td><a href = "/" > <ب>خانهب>الف>td> tr> <tr> <td><a href = "/ در باره /"> درمورد منالف>td> tr> <tr> <td><a href = "/ من و خودم /"> من و سلطه بر جهانالف>td> tr> <tr> <td><a href = "/ مخاطب /"> مخاطبالف>td> tr> جدول>// انتهای منو<h1>صفحه نخستh1> <p> p> <p>متن درباره من: متن درباره من: متن درباره من: متن درباره من:p> <p>متن درباره من: متن درباره من: متن درباره من: متن درباره من:p> <p>متن درباره من: متن درباره من: متن درباره من: متن درباره من:p> بدن> html>برای افزودن یک الگو به CMS، باید یک فایل در فهرست tpls / content ایجاد کنید، به عنوان مثال test.tpl، و کد HTML خود را در آنجا وارد کنید. فایل CSS باید در پوشه css/cms قرار گیرد و نام آن style.css باشد. بهتر است تصاویر را در پوشه تصاویر قرار دهید. فراموش نکنید که مسیرها را برای همه تصاویر و فایل های CSS تغییر دهید.
اظهار نظر
در نام فایل قالب نمی توان از حروف روسی استفاده کرد!
برای اینکه سیستم بتواند قالب جدید را "دیده" کند و از آن برای نمایش صفحات استفاده کند، باید قالب به سیستم اضافه شود. برای انجام این کار، به تنظیمات ماژول "Structure"، تب "Templates" بروید ( http://yourdomain.ru/admin/content/config/ ). لیستی از الگوهای نصب شده در هر دامنه را خواهید دید که در نسخه زبان انتخاب شده وجود دارد.
برای قرار دادن یک فایل قالب جدید، خط آزاد پایین فیلدها را پر کنید. نام الگو"(مثلاً یک اسم معنی دار به آن بدهید" الگوی تست من") و" نام فایل "(در مورد ما test.tpl) و روی دکمه "ذخیره" کلیک کنید.
اگر می خواهید این الگو به عنوان الگوی پیش فرض استفاده شود، کادر کنار آن «اصلی» را علامت بزنید. اکنون این الگو به صورت پیش فرض در منوی کشویی انتخاب الگو انتخاب می شود. همچنین برای نمایش صفحات سیستمی که از الگوی پیش فرض استفاده می کنند (ثبت نام، بازیابی رمز عبور، نقشه سایت) استفاده می شود.
هنگام ویرایش هر صفحه، الگوها در لیست کشویی قابل مشاهده خواهند بود:
بنابراین، در یک سایت، می توانید از چندین قالب به طور همزمان استفاده کنید، و الگوی مناسب را هم برای یک صفحه و هم برای گروهی از صفحات انتخاب کنید.
سعی کنید یک صفحه جدید ایجاد کنید (مطمئن شوید که یک قالب جدید در گزینه Design Template انتخاب شده است) و ببینید چه اتفاقی در سایت می افتد.
قالب HTML شما باید در سایت ظاهر شود. اما اکنون ثابت است. اکنون باید آن را پویا کنید.
ابتدا باید تعیین کنید که کدام بخش از کد HTML تغییر خواهد کرد. در مورد ما، موارد زیر تغییر خواهد کرد:
عنوان پنجره
متا تگ کلمات کلیدی و توضیحات.
عنوان متن
;
متن واقعی؛
منوی سایت
یعنی باید کمی با قالب HTML کار کنیم و به جای قسمت های در حال تغییر، ماکروهای مربوطه را قرار دهیم.
به عنوان مثال، در ابتدای فایل HTML، متا تگ ها و یک عنوان وجود دارد:
<نام متا = "شرح"محتوا = "توضیحات سایت واسیلی پوپکین" /> <نام متا = "کلید واژه ها"محتوا = "سایت رسمی واسیا واسیلی پوپکین" /> <عنوان>وب سایت واسیا پوپکین: صفحه اصلیعنوان>ما آنها را با ماکروهای مربوطه جایگزین می کنیم (لیست ماکروها در ضمیمه آمده است):
<نام متا = "شرح"محتوا = "% توضیحات%" /> <نام متا = "کلید واژه ها"محتوا = "٪ کلید واژه ها٪" /> <عنوان>٪ عنوان٪عنوان>اکنون، هنگام تولید صفحات، سیستم متا تگ ها و عنوان را که برای هر صفحه به صورت جداگانه تجویز شده است، می گیرد و آنها را به جای ماکروهای مربوطه جایگزین می کند. به خاطر سپردن نام ماکروها بسیار آسان است.
بیایید همین کار را با عنوان متن انجام دهیم. اینجوری بود:
<h1>صفحه نخستh1>و چنین خواهد شد. سرصفحه متن توسط ماکرو% header% ارائه می شود:
<h1>٪ سرتیتر٪h1>متن اصلی صفحه نیز تغییر می کند:
<p>متن درباره من: متن درباره من: متن درباره من: متن درباره من:p> <p>متن درباره من: متن درباره من: متن درباره من: متن درباره من:p> <p>متن درباره من: متن درباره من: متن درباره من: متن درباره من:p> <p>متن درباره من: متن درباره من: متن درباره من: متن درباره من:p>یک ماکرو برای نمایش متن اصلی صفحه وجود دارد ٪ محتوا٪ :
٪ محتوا٪به ابتدای فایل بین تگ ها
وماکرو را وارد کنید:این خط ویرایش سریع و سایر ویژگی های مفید را امکان پذیر می کند. با آن می توانید با فشار دادن تغییر مکان +دی، به سرعت به سراغ ویرایش صفحه فعلی سایت یا هر یک از قطعات آن بروید.
در نتیجه، شما باید موارد زیر را دریافت کنید:
<html> <سر> <نام متا = "شرح"محتوا = "% توضیحات%" /> <نام متا = "کلید واژه ها"محتوا = "٪ کلید واژه ها٪" /> <عنوان>٪ عنوان٪عنوان> <لینک href = "style.css" rel = "شیوه نامه"نوع = "متن / css" /> ٪ سیستم شاملQuickEditJs ()٪سر> <بدن>// منوی شروع<حاشیه جدول = "1" > <tr> <td><a href = "/" > <ب>خانهب>الف>td> tr> <tr> <td><a href = "/ در باره /"> درباره شرکتالف>td> tr> <tr> <td><a href = "/ پروژه ها /"> پروژه هاالف>td> tr> <tr> <td><a href = "/ مخاطب /"> مخاطبالف>td> tr> جدول>// انتهای منو<h1>٪ سرتیتر٪h1>٪ محتوا٪بدن> html>بنابراین، فایل قالب را ذخیره می کنیم و به نتیجه نگاه می کنیم. اکنون صفحه تقریباً کاملاً پویا است، به استثنای منو. لازم است منوی سایت "احیا" شود. بیایید ببینیم منو چگونه تنظیم شده است:
// منوی شروع<حاشیه جدول = "1" > <tr> <td><a href = "/" > <ب>خانهب>الف>td> tr> <tr> <td><a href = "/ در باره /"> درمورد منالف>td> tr> <tr> <td><a href = "/ من و خودم /"> من و سلطه بر جهانالف>td> tr> <tr> <td><a href = "/ مخاطب /"> مخاطبالف>td> tr> جدول>// انتهای منومنو از آیتم ها تشکیل شده است. خود منو به نوعی تزئین شده است و موارد نیز طرحی دارند. به عنوان مثال، کل منو می تواند دارای نوعی قاب یا پس زمینه باشد، آیتم منوی فعلی را می توان با پررنگ برجسته کرد و غیره. همچنین، سطوح مختلف می تواند در یک منو وجود داشته باشد.
کادر منو را انتخاب کنید:
// منوی شروع<حاشیه جدول = "1" > جدول>// انتهای منوآیتم منو به این صورت طراحی شده است:
<tr> <td><a href = "/ مخاطب /"> مخاطبالف>td> tr>آیتم منوی فعلی به گونه ای متفاوت استایل بندی شده است:
<tr> <td><a href = "/" > <ب>خانهب>الف>td> tr>قالب اصلی منو در فایل /tpls/content/menu/default.tpl قرار دارد و به شکل زیر است:
% متن %