تیشرت Laravel
خرید
اطلاعات بیشتر

چگونه در فریم ورک لاراول sitemap ایجاد کنیم؟

تبلیغات
کانال تلگرام فتولیا

در این مطلب می خواهم نحوه ایجاد نقشه سایت یا همون Sitemap در فریم ورک لاراول رو به صورت داینامیک توضیح بدم .برای این کار از بسته “RoumenDamianoff/laravel-sitemap” استفاده می کنیم. همونطور که می دونید سایت مپ ها برای سئو سایت شما بسیار موثر هستند چون محتوای سایت شما رو به صورت تمیز و مرتب شده در اختیار موتورهای جستجو مثل گوگل قرار می دهند و باعث افزایش رتبه و ترافیک ورودی شما از گوگل می شوند.

اخیرا سایتی با لاراول نوشتم که دارای مقالات و اخبار مختلف بود و نیاز بود تمام اونها سریعا در گوگل ثبت بشن.برای همین با استفاده از بسته فوق این امکان رو اضافه کردم که نقشه سایت به صورت اتوماتیک از همه محتویات سایت ایجاد بشه و اون رو در گوگل وب مستر ثبت کردم . اگر شما هم از لاراول استفاده می کنید و قصد ایجاد sitemap رو از محتویات پروژه تون دارید با ما همراه باشید.

xmlsitemap

در ادامه بسته مورد نظر رو نصب و نحوه اش رو خواهیم دید.

قدم اول : نصب بسته

ابتدا باید دستور زیر را در ترمینال وارد کنید تا آخرین نسخه از بسته روی لاراول نصب بشه.(برای اجرای این دستور باید composer نصب باشه و مسیر ترمینال روی پوشه اصلی پروژه باشه)

composer require roumen/sitemap

حالا باید ServiceProvider اش رو به تنظیمات لاراول اضافه کنیم.فایل config/app.php رو باز کنید و در بخش providers اضافه کنید:

'providers' => [
	....
	'Roumen\Sitemap\SitemapServiceProvider',
]

و در انتها برای پابلیش کردن فایل تنظیمات خود این بسته در مسیر config/sitemap.php ،باید دستور زیر را در ترمینال وارد کنید:

php artisan vendor:publish --provider="Roumen\Sitemap\SitemapServiceProvider"

 

قدم دوم : ایجاد Sitemap در Route

قدم نهایی اضافه کردن کدهایی است که نقشه سایت رو ایجاد می کنند.من این کدها رو داخل بخش route لاراول قرار دادم و شما می تونید داخل controller دلخواه تون هم ببرید.

در همین رابطه :   روت Resource لاراول برای API: چطور متدهای Create/Edit را حذف کنیم؟

کدهای زیر رو در فایل routes/web.php وارد کنید:

Route::get('sitemap', function(){
    /* create new sitemap object */
    $sitemap = App::make("sitemap");
    
    /* add item to the sitemap (url, date, priority, freq) */
    $sitemap->add(URL::to('/'), '2012-08-25T20:10:00+02:00', '1.0', 'daily');
    
 
    $posts = DB::table('post')
                ->select('post.*'
                    ,'post.title as postTitle','post.slug as postSlug'
                    ,'post_image.image as image','post.updated_at as postUpdated_at')
                    ->join('post_image','post_image.post_id','=','post.id')
                    ->orderBy('created_at','desc')
                    ->groupBy('post.id')
                    ->get();
    
    $postResult = array();
    if(!empty($posts)){
        foreach ($posts as $key => $value) {
            $postResult[$value->id]['id'] = $value->id;
            $postResult[$value->id]['slug'] = $value->postSlug;
            $postResult[$value->id]['postTitle'] = $value->postTitle;
            $postResult[$value->id]['postUpdated_at'] = $value->postUpdated_at;
            $postResult[$value->id]['image'][] = $value->image;
        }
    }
    
     /* add every post to the sitemap */
     foreach ($postResult as $key=>$value)
     {
        $images = array();
        foreach ($value['image'] as $key2 => $value2) {
            $images[] = array(
                'url' => URL::to('/')."/uploadImages/post/".$value2,
                'title' => $value['slug'],
                'caption' => $value['postTitle']
            );    
        }
        $sitemap->add(URL::route('front.post',$value['slug']), $value['postUpdated_at'], '1.0', 'daily', $images);
    }
    
    /* show your sitemap (options: 'xml' (default), 'html', 'txt', 'ror-rss', 'ror-rdf') */
    return $sitemap->render('xml');
});

 

دقت کنید که کد بالا برای جدول و سایت خاصی نوشته شده و شما باید بخش هایی از اون رو بسته به جدول ها و دیتابیس سایت خودتون ویرایش کنید.مثلا من کد بالا رو برای سایت خودم اول به controller انتقال دادم تا فایل route شلوغ نشه و چون می خواستم همزمان از چندین بخش sitemap بسازم، به این صورت تغییرش دادم :

class SitemapController extends Controller
{
    public function mainSite()
    {
        /* create new sitemap object */
        $sitemap = App::make("sitemap");

        /* add item to the sitemap (url, date, priority, freq) */
        $sitemap->add(URL::to('/'), date('c', time()) , '1.0', 'daily');


        $tabs = Tab::where('sub_domain_id', null)->get();
        $tabResult = array();
        if(!empty($tabs)){
            foreach ($tabs as $key => $value) {
                $tabResult[$value->id]['id'] = $value->id;
                $tabResult[$value->id]['slug'] = $value->slug;
                $tabResult[$value->id]['title'] = $value->title;
                $tabResult[$value->id]['updated_at'] = $value->updated_at;
                $tabResult[$value->id]['image'][] = $value->image;
            }
        }

        /* add every tab to the sitemap */
        foreach ($tabResult as $key=>$value)
        {
            $images = array();
            foreach ($value['image'] as $key2 => $value2) {
                if(isset($value2))
                {
                    $images[] = array(
                        'url' => route('getEntry', ['tab', $value2]),
                        'title' => $value['slug'],
                        'caption' => $value['title']
                    );
                }

            }
            $sitemap->add(route('tab.show',[$value['id'], $value['slug']]), $value['updated_at'], '1.0', 'daily', $images);
        }

        /*******************************************************/
        $tabs = News::where('sub_domain_id', null)->get();
        $tabResult = array();
        if(!empty($tabs)){
            foreach ($tabs as $key => $value) {
                $tabResult[$value->id]['id'] = $value->id;
                $tabResult[$value->id]['slug'] = $value->slug;
                $tabResult[$value->id]['title'] = $value->title;
                $tabResult[$value->id]['updated_at'] = $value->updated_at;
                $tabResult[$value->id]['image'][] = $value->image;
            }
        }

        /* add every tab to the sitemap */
        foreach ($tabResult as $key=>$value)
        {
            $images = array();
            foreach ($value['image'] as $key2 => $value2) {
                if(isset($value2))
                {
                    $images[] = array(
                        'url' => route('getEntry', ['news', $value2]),
                        'title' => $value['slug'],
                        'caption' => $value['title']
                    );
                }
            }
            $sitemap->add(route('news.show',[$value['id'], $value['slug']]), $value['updated_at'], '1.0', 'daily', $images);
        }

        /*******************************************************/
        $tabs = Menu::where('sub_domain_id', null)->get();
        $tabResult = array();
        if(!empty($tabs)){
            foreach ($tabs as $key => $value) {
                $tabResult[$value->id]['id'] = $value->id;
                $tabResult[$value->id]['slug'] = $value->slug;
                $tabResult[$value->id]['title'] = $value->title;
                $tabResult[$value->id]['updated_at'] = $value->updated_at;
                $tabResult[$value->id]['image'][] = $value->image;
            }
        }

        /* add every tab to the sitemap */
        foreach ($tabResult as $key=>$value)
        {
            $images = array();
            foreach ($value['image'] as $key2 => $value2) {
                if(isset($value2))
                {
                    $images[] = array(
                        'url' => route('getEntry', ['menu', $value2]),
                        'title' => $value['slug'],
                        'caption' => $value['title']
                    );
                }
            }
            $sitemap->add(route('menu.show',[$value['id'], $value['slug']]), $value['updated_at'], '1.0', 'daily', $images);
        }
        /*******************************************************/
        $tabs = IranianStudent::where('sub_domain_id', null)->get();
        $tabResult = array();
        if(!empty($tabs)){
            foreach ($tabs as $key => $value) {
                $tabResult[$value->id]['id'] = $value->id;
                $tabResult[$value->id]['slug'] = $value->slug;
                $tabResult[$value->id]['title'] = $value->title;
                $tabResult[$value->id]['updated_at'] = $value->updated_at;
                $tabResult[$value->id]['image'][] = $value->image;
            }
        }

        /* add every tab to the sitemap */
        foreach ($tabResult as $key=>$value)
        {
            $images = array();
            foreach ($value['image'] as $key2 => $value2) {
                if(isset($value2))
                {
                    if(isset($value2))
                    {
                        $images[] = array(
                            'url' => route('getEntry', ['is', $value2]),
                            'title' => $value['slug'],
                            'caption' => $value['title']
                        );
                    }
                }
            }
            $sitemap->add(route('is.show',[$value['id'], $value['slug']]), $value['updated_at'], '1.0', 'daily', $images);
        }

        /*******************************************************/
        $tabs = NewVolunteer::where('sub_domain_id', null)->get();
        $tabResult = array();
        if(!empty($tabs)){
            foreach ($tabs as $key => $value) {
                $tabResult[$value->id]['id'] = $value->id;
                $tabResult[$value->id]['slug'] = $value->slug;
                $tabResult[$value->id]['title'] = $value->title;
                $tabResult[$value->id]['updated_at'] = $value->updated_at;
                $tabResult[$value->id]['image'][] = $value->image;
            }
        }

        /* add every tab to the sitemap */
        foreach ($tabResult as $key=>$value)
        {
            $images = array();
            foreach ($value['image'] as $key2 => $value2) {
                if(isset($value2))
                {
                    $images[] = array(
                        'url' => route('getEntry', ['nv', $value2]),
                        'title' => $value['slug'],
                        'caption' => $value['title']
                    );
                }
            }
            $sitemap->add(route('nv.show',[$value['id'], $value['slug']]), $value['updated_at'], '1.0', 'daily', $images);
        }

        /* show your sitemap (options: 'xml' (default), 'html', 'txt', 'ror-rss', 'ror-rdf') */
        return $sitemap->render('xml');
    }

امیدوارم استفاده کنید و لذت ببرید.سوال یا نظری داشتید بپرسید

در همین رابطه :   آموزش فیلتر نتایج بر اساس تاریخ و زمان در لاراول

منبع

پاسخ دهید

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

More in CSS
الحاق فونت دلخواه به صفحه با استفاده از css

سلام احتمالا در حال وبگردي سايت هايي را ديده ايد كه از فونت هاي عجيب و غريب استفاده مي كنند...

Close