برنامه نویسی

ایجاد یک برنامه تک صفحه ای با استفاده از Mustache و PHP

آیا تا به حال می خواهید به توسعه برنامه تک صفحه ای Mustache تسلط داشته باشید؟ آیا می دانستید که می توانید از PHP با آن استفاده کنید؟ در این آموزش، نحوه ایجاد یک برنامه تک صفحه ای با استفاده از Mustache و PHP را بررسی می کنیم.

در دنیای پر سرعت امروز، کاربران انتظار دارند که وب سایت ها و برنامه ها به سرعت بارگذاری شوند و تجربه ای یکپارچه ارائه دهند. برنامه های کاربردی تک صفحه ای (SPA) به عنوان یک راه حل محبوب برای برآورده کردن این انتظارات ظاهر شده اند. با استفاده از Mustache و PHP، توسعه دهندگان می توانند SPAهای پویا، پاسخگو و مقیاس پذیر بسازند که محتوا و عملکرد را بدون نیاز به بارگذاری مجدد صفحه ارائه می دهند. با این حال، تسلط بر این فناوری‌ها می‌تواند چالش برانگیز باشد، به‌ویژه برای کسانی که تازه وارد توسعه وب شده‌اند.

در این آموزش، ما عمیقاً به دنیای Mustache و PHP می پردازیم تا به شما در تسلط بر توسعه اپلیکیشن تک صفحه ای کمک کنیم. ما اصول اولیه SPA ها را پوشش خواهیم داد، در مورد مزایای استفاده از Mustache و PHP بحث خواهیم کرد و راهنمایی های گام به گام در مورد نحوه ساخت SPA از ابتدا ارائه خواهیم کرد. چه مبتدی باشید که به دنبال کسب اطلاعات بیشتر در مورد توسعه وب هستید یا یک توسعه دهنده با تجربه که به دنبال گسترش مهارت های خود است، این آموزش بینش های ارزشمند و نکات عملی را در اختیار شما قرار می دهد تا توسعه SPA خود را به سطح بعدی ارتقا دهید.

این را در یوتیوب مشاهده کنید

https://www.youtube.com/watch?v=B7hIR_Ii_d4

ساختار فایل

index.php
autoload.php
.htaccess
/controllers
   Nav.php
   Templates.php
/sass
     style.scss
/css (generated by Sass)
   style.css
   style.min.css
/views
   404.html
   about.html
   contact.html
   home.html
   partials/
      /contact
         forms.mustache
      footer.mustache
      header.mustache
      styles.mustache
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

فایل htaccess

ما در حال استفاده از .htaccess فایل برای تغییر مسیر همه تماس های صفحه به index.php فایل. بنابراین اگر به / بروید index.php را نشان می دهد و اگر به /about بروید همان index.php را نشان می دهد. ما از این به عنوان اساس مسیریابی خود استفاده خواهیم کرد.

<IfModule mod_rewrite.c>
    Options +FloowSymLinks
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule (.*) index.php [L]
</IfModule>
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

سبیل را نصب کنید

می توانید Mustache را از وب سایت آنها دانلود کنید یا از Composer برای نصب آن استفاده کنید. برای این آموزش، از Composer استفاده خواهیم کرد.

composer require mustache/mustache
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

با این کار از طریق Composer به فروشنده و autoloader دسترسی خواهیم داشت.

index.php ما را راه اندازی کنید

از آنجایی که این فایل برای تمام درخواست‌های این وب‌سایت استفاده خواهد شد، باید آن را به گونه‌ای پیکربندی کنیم که به عنوان روتر عمل کند.

<?php
require_once 'vendor/autoload.php';
require_once 'autoload.php';

Mustache_Autoloader::register();
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

Autoloader ما را ایجاد کنید (برای کلاس های برنامه ما)

در ویدیوی قبلی که ایجاد کردم، به نحوه ایجاد Autoloader خود برای کلاس های سفارشی خود پرداختم. شما می توانید آن ویدئو را در اینجا ببینید:

https://www.youtube.com/watch?v=ox8aeQ31PE0

این کد زمانی به کار می آید که شما در حال ایجاد کلاس های سفارشی خود هستید و نمی خواهید به آنها نیاز داشته باشید یا آنها را اضافه کنید. در این مورد، ما از آن برای بیرون کشیدن کلاس های سفارشی خود از آن استفاده خواهیم کرد controllers پوشه

<?php
function autoload($class) {
    include 'controllers/'.$class.'.php';
}

spl_autoload_register('autoload');
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

کلاس الگوهای ما را ایجاد کنید

کلاس الگو دارای چند روش کلیدی در خود خواهد بود که از Mustache استفاده می کند و محتوا/داده ها را ارائه می کند.

در ما __contruct روش، ما مقداردهی اولیه می کنیم Mustache Engine و جزئی های خود را به شی اضافه می کنیم. این به زمانی کمک می کند که ما از قسمت های زیر استفاده کنیم.

بعد، ما ایجاد می کنیم render روش. این روش محتوا را از view HTML دریافت می کند و با استفاده از Mustache آن را تجزیه می کند. برای اهداف بلوک کد بعدی، a را کدگذاری کرده ایم $data آرایه ای که برای صفحه اصلی استفاده خواهد شد. در چند مرحله زیر، یک متد ایجاد می کنیم data که از دستور switch برای دریافت محتوا برای چندین صفحه استفاده می کند.

بالاخره داریم getPageURL. این روش صفحه فعلی را از URL می گیرد و به ما امکان می دهد از آن استفاده کنیم render تابعی برای بیرون کشیدن قالب مناسب از پوشه views.

<?php
class Templates {
    private $m;

    public function __construct(){
        $this->m = (new \Mustache_Engine(
            [
            'partials_loader' => new \Mustache_Loader_FilesystemLoader('views/partials'),
            ]
        ));
    }

    public function render($template) {
        $data['content'] = [
           'title' => 'Home',
           'heading' => 'Welcome to the home page!',
           'content' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.'
        ];
        $template = @file_get_contents('views'. $template.'.html');
        if($template === false) {
            $template = file_get_contents('views/404.html');
        }
        return $this->m->render($template, $data);
    }

    public function getPageURL() {
        $url = explode('?', $_SERVER['REQUEST_URI']);
        return ($url[0] == "https://dev.to/" ? '/home' : $url[0]);
    }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

توجه کنید @ نماد روی file_get_contents روش. این کار از نمایش هشدارها در صورت یافت نشدن فایل جلوگیری می کند. ما با تماس الگوی 404 خود به آن رسیدگی خواهیم کرد.

اولین الگوی ما را راه اندازی کنید

ما در حال حاضر به استفاده از {{}} متغیرهای سبیل در HTML ساده ما.

وقتی می بینید {{ variable }}، این متغیری را چاپ می کند که با داده های ارسال شده مطابقت دارد. در کد ما استفاده می کنیم {{ content.title }} برای عنوان این به الگو می گوید که به دنبال یک آرایه باشد content و مقدار را از title هدف – شی. اگر برای تولید یک شی رندر شده به الگو نیاز دارید، باید از آن استفاده کنید {{{ variable }}}، در غیر این صورت، فقط به صورت متن نمایش داده می شود.

شما نیز متوجه خواهید شد {{> styles }} در کد زیر این قسمت هایی را اضافه می کند که با آن نام مطابقت دارند. در زیر کمی بیشتر به آن خواهیم پرداخت.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>{{ content.title }}</title>
    {{> styles }}
</head>
<body>
    {{> header }}
    <main>
        <h1>{{ content.heading }}</h1>
        <p>{{ content.content }}</p>
    </main>
    {{> footer }}
</body>
</html>
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در بیشتر موارد، می‌توانید این را برای هر صفحه اضافی کپی کنید، مگر اینکه محتوا یا داده‌های متفاوتی را به الگو اضافه کنید.

برچسب های خاصی وجود دارد که در سبیل استفاده می کنید. من رایج ترین آنها را در اینجا لیست می کنم:

{{ variable }}
این به شما امکان می دهد متنی را از یک متغیر اضافه کنید.

{{{ variable }}}
این به شما امکان می دهد متن رندر شده را اضافه کنید (با متن متفاوت است {{}}).

{{# variable }} هر چی میخوای اینجا {{/ variable }}
اگر یک متغیر درست باشد

{{^ variable }} هر چی میخوای اینجا {{/ variable }}
اگر یک متغیر نادرست باشد

{{# array }}
   {{ item }}
{{/ array}}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

موارد را از یک آرایه به عنوان یک حلقه یا استفاده کنید {{ array.item }} برای به دست آوردن یک مورد

{{> folder/template }}
یک سبیل جزئی از یک پوشه دریافت کنید، به یاد داشته باشید که الگوهای موجود در این پوشه باید پسوند .mustache را داشته باشند زیرا از طریق کد Mustache ارائه می شود.

تنظیمات جزئی

در این قسمت از آموزش قصد داریم a را ایجاد کنیم header، footer، و style جزئي. جزئی را به عنوان یک در نظر بگیرید include یا require فایلی که معمولاً در PHP استفاده می کنید.

در views/partials پوشه، فایل های زیر را ایجاد کنید:

سربرگ.سبیل

<header>
    {{# nav.header }}
        <div class="logo">[logo]</div>
        <ul>
            {{# links }}
                <li><a href="{{ url }}">{{ name }}</a></li>
            {{/ links }}
        </ul>
    {{/ nav.header }}
</header>
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

پاورقی.سبیل

<footer>
    {{# nav.footer }}
        <ul>
            {{# links }}
                <li><a href="{{ url }}">{{ name }}</a></li>
            {{/ links }}
        </ul>
    {{/ nav.footer }}
</footer>
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

سبک ها.سبیل

<link href="/css/style.min.css" rel="stylesheet">
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

شما می توانید هر تعداد جزئی که نیاز دارید ایجاد کنید، اما برای این آموزش، ما فقط از این 3 مورد استفاده خواهیم کرد.

کلاس Nav خود را ایجاد کنید

در پوشه کنترلرها، فایل Nav.php خود را ایجاد کنید. ما از این برای ایجاد پویا لینک های هدر و پاورقی استفاده می کنیم.

<?php

class Nav {

    public function header() {
        $header = [
            'links' => [
                ['url'=>"https://dev.to/", 'name'=>'Home'],
                ['url'=>"https://dev.to/about", 'name'=>'About'],
                ['url'=>"https://dev.to/contact", 'name'=>'Contact'],
            ]
        ];
        return $header;
    }

    public function footer() {
        $footer = [
            'links' => [
                ['url'=>"https://dev.to/about", 'name'=>'About'],
                ['url'=>"https://dev.to/contact", 'name'=>'Contact'],
            ]
        ];
        return $footer;
    }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اکنون که کلاس nav را ایجاد کرده ایم، می توانیم آن را به کلاس قالب خود اضافه کنیم.

در شما Templates.php فایل، یک متغیر جدید در زیر اضافه کنید private $m;، بنابراین اکنون می گوید

private $m;
private $nav;
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این متغیر کلاس ما را اعلام می کند. بنابراین، در حال حاضر، در شما constructor اضافه کردن $this->nav = new Nav(); زیر Mustache_Engine متغیر. این به ما امکان دسترسی به کلاس nav را می دهد.

ما در یک لحظه از این استفاده خواهیم کرد.

ایجاد داده های پویا

در قسمت اول کد، فقط داده ها را برای صفحه اصلی اضافه کردیم.

$data['content'] = [
    'title' => 'Home',
    'heading' => 'Welcome to the home page!',
    'content' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.'
];
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

ما می خواهیم این را بگیریم و آن را پویاتر کنیم. ایجاد یک تابع جدید در Templates.php فایل فراخوانی شد data(). ما می‌خواهیم عبارت هدر، پاورقی و سوئیچ خود را برای داده‌ها اضافه کنیم. کد نهایی شما باید چیزی شبیه به این باشد:

public function data($page) {
    $data['nav']['header'] = $this->nav->header();
    $data['nav']['footer'] = $this->nav->footer();
    switch ($page) {
        case '/home':
            $data['content'] = [
                'title' => 'Home',
                'heading' => 'Welcome to the home page!',
                'content' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.'
            ];
            break;
        case "https://dev.to/about":
            $data['content'] = [
                'title' => 'About',
                'heading' => 'Welcome to the about page!',
                'content' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.',
                'additional' => ['item 1', 'item 2', 'item 3']
            ];
            break;
        case "https://dev.to/contact":
            $data['content'] = [
                'title' => 'Contact',
                'heading' => 'Welcome to the contact page!',
                'content' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.'
            ];
            break;
        default:
            $data['content'] = [
                'title' => '404',
                'heading' => 'Oops! Page Not Found',
                'content' => 'This page cannot be found, please try again.'
            ];
            break;
    }
    return $data;
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این به ما اجازه می دهد تا قالب های HTML دیگری را در نظر خود ایجاد کنیم (about.html،contact.html،404.html) و همچنین به قسمت های سرصفحه و پاورقی ما پیوند دهید.

اگر قبلاً این کار را نکرده اید، ادامه دهید و آن صفحات را ایجاد کنید.

آنها باید شبیه home.html باشند که قبلا ایجاد کرده ایم.

index.php را برای تغییرات قالب به روز کنید

ما در ابتدا index.php را با ارجاع به ایجاد کردیم Mustache_Autoloader. اکنون می توانیم این صفحه را تمام کنیم.

کد زیر را به پایان از index.php:

$templates = new Templates();
$page = $templates->getPageURL();
$data = $templates->data($page);

echo $templates->render($page, $data);
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

آن کد اکنون باید وارد شود Templates class و توابعی را که ایجاد کردیم برای نمایش داده ها و دریافت الگوها فراخوانی کنید.

نتیجه

اکنون باید بتوانید کد خود را اجرا کنید و صفحات و محتوای مختلف روش های خود را مشاهده کنید.

این یک راه ساده برای ایجاد یک وب سایت پویا است و نکته جالب این است که سبیل اهمیتی نمی دهد که داده ها از کجا آمده اند. در این آموزش، ما آن را به روش سخت کدگذاری می کنیم، اما می توانید آن را از یک پایگاه داده، یک API، یک فایل JSON یا حتی یک CSV بکشید. تا زمانی که داده‌ها را به الگو ارسال می‌کنید، Mustache آن را در جایی نمایش می‌دهد {{ variable }} است.

تنها چیزی که باید به خاطر بسپارید این است که Mustache یک موتور قالب “بدون منطق” است. بنابراین نمی توانید عبارات منطقی را انجام دهید. داده ها باید قبل از ورود به الگو آماده شوند. بنابراین اگر شما نیاز به انجام یک if بیانیه، شما باید این کار را قبل از رندر کردن قالب در کد PHP انجام دهید. خارج از آن، این یک ابزار بسیار مفید برای ایجاد وب سایت های پویا و مبتنی بر داده است.

ویدیوی بالا را تماشا کنید یا با استفاده از نمایه GitHub من، کدهای کامل را از اینجا دانلود کنید: https://github.com/thedevdrawer/mustache-php.

موفق باشید در برنامه نویسی با سبیل.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا