php संगीतकार का उपयोग किए बिना एक लार्वेल परियोजना में गतिशील साइटमैप उत्पन्न करें




laravel-4 sitemap (3)

मान लीजिए कि आप अपनी वेबसाइट की sitemap.xml फाइल को डेटाबेस में सभी डॉक्टरों और रोगियों के लिंक जोड़ने के लिए चाहते हैं, तो आप ऐसा कर सकते हैं:

routes.php फ़ाइल में ..

Route::get("sitemap.xml", array(
    "as"   => "sitemap",
    "uses" => "[email protected]", // or any other controller you want to use
));

HomeController.php फ़ाइल में (यदि आप होम कंट्रोलर का उपयोग करने का निर्णय लिया है) ..

public function sitemap()
{
    $doctors = Doctor::remember(59) // chach this query for 59 minutes
        ->select(["id", "updated_at"]) 
        // you may want to add where clauses here according to your needs
        ->orderBy("id", "desc")
        ->take(50000) // each Sitemap file must have no more than 50,000 URLs and must be no larger than 10MB
        ->get();

    $patients = Patient::remember(59) // chach this query for 59 minutes
        ->select(["id", "updated_at"]) 
        // you may want to add where clauses here according to your needs
        ->orderBy("id", "desc")
        ->take(50000) // each Sitemap file must have no more than 50,000 URLs and must be no larger than 10MB
        ->get();

    $content = View::make('sitemap', ['doctors' => $doctors, 'patients' => $patients]);
    return Response::make($content)->header('Content-Type', 'text/xml;charset=utf-8');
}

दृश्य / sitemap.blade.php फ़ाइल में ..

<?php echo '<?xml version="1.0" encoding="UTF-8"?>' ?>

<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
@foreach($doctors as $doctor)
    <url>
        <loc>{{ URL::route("doctors.show", [$doctor->id]) }}</loc>
        <lastmod>{{ gmdate(DateTime::W3C, strtotime($doctor->updated_at)) }}</lastmod>
        <changefreq>daily</changefreq>
        <priority>1.0</priority>
    </url>
@endforeach

@foreach($patients as $patient)
    <url>
        <loc>{{ URL::route("patients.show", [$patient->id]) }}</loc>
        <lastmod>{{ gmdate(DateTime::W3C, strtotime($patient->updated_at)) }}</lastmod>
        <changefreq>daily</changefreq>
        <priority>1.0</priority>
    </url>
@endforeach
</urlset>

मैं अपने लारवेल परियोजना के लिए Dynamic sitemap जेनरेट करना चाहता हूं। मैंने एक उत्तर के लिए इतने सारे साइट्स में पहले ही खोज की थी उनमें से कुछ संगीतकार का उपयोग करते हुए इसका वर्णन करते हैं। मुझे ऐसा नहीं मिला कि यह कैसे करना है और कुछ अन्य साइटों में उन्होंने लूप में डीबी से यूआरएल प्राप्त करने के लिए कोड लिखे हैं। मेरे प्रोजेक्ट डीबी में मैंने किसी भी यूआरएल को नहीं बचाया। मेरी परियोजना डॉक्टर और रोगियों के लिए एक साइट है तो क्या कोई भी php / laravel codes for dynamic sitemap generation कैसे लिख सकता है।

संपादित करें

मैं लारेल के लिए एक नौसिखिया हूँ इसलिए मैं इस संगीतकार से सिर्फ अपरिचित हूं। क्या कोई मुझे बता सकता है कि क्या मैं ग्रिथूब से लार्वाल-साइटमैप-मास्टर.जिप को डाउनलोड कर सकता हूं जहां मैं इसे निकालने और अपनी प्रोजेक्ट निर्देशिका में बचा सकता हूं? अगर कोई इस का उत्तर दें तो यह बहुत उपयोगी होगा।


इस लाइन को अपने routes.php में जोड़ें

Route::get('/sitemap', function()
{
   return Response::view('sitemap')->header('Content-Type', 'application/xml');
});

नया फाइल ऐप \ एचटीपी \ मिडलवेयर \ sitemap.php बनाएँ

<?php namespace App\Http\Middleware;

use Closure;
use Carbon\Carbon;
use Illuminate\Contracts\Auth\Guard;

class sitemap {

    /**
     * The Guard implementation.
     *
     * @var Guard
     */
    protected $auth;

    public function __construct(Guard $auth)
    {
        $this->auth = $auth;
    }


    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request $request
     * @param  \Closure                 $next
     *
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if ( !$request->is("sitemap") && $request->fullUrl() != '' && $this->auth->guest() )
        {
            $aSiteMap = \Cache::get('sitemap', []);
            $changefreq = 'always';
            if ( !empty( $aSiteMap[$request->fullUrl()]['added'] ) ) {
                $aDateDiff = Carbon::createFromTimestamp( $aSiteMap[$request->fullUrl()]['added'] )->diff( Carbon::now() );
                if ( $aDateDiff->y > 0 ) {
                    $changefreq = 'yearly';
                } else if ( $aDateDiff->m > 0) {
                    $changefreq = 'monthly';
                } else if ( $aDateDiff->d > 6 ) {
                    $changefreq = 'weekly';
                } else if ( $aDateDiff->d > 0 && $aDateDiff->d < 7 ) {
                    $changefreq = 'daily';
                } else if ( $aDateDiff->h > 0 ) {
                    $changefreq = 'hourly';
                } else {
                    $changefreq = 'always';
                }
            }
            $aSiteMap[$request->fullUrl()] = [
                'added' => time(),
                'lastmod' => Carbon::now()->toIso8601String(),
                'priority' => 1 - substr_count($request->getPathInfo(), '/') / 10,
                'changefreq' => $changefreq
            ];
            \Cache::put('sitemap', $aSiteMap, 2880);
        }
        return $next($request);
    }
}

और नया दृश्य फ़ाइल संसाधन बनाएँ \ views \ sitemap.blade.php

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
        xmlns:image="http://www.google.com/schemas/sitemap-image/1.1"
        xmlns:video="http://www.google.com/schemas/sitemap-video/1.1">
    @foreach( Cache::get('sitemap') as $url => $params )
    <url>
        <loc>{{$url}}</loc>
        <lastmod>{{$params['lastmod']}}</lastmod>
        <changefreq>{{$params['changefreq']}}</changefreq>
        <priority>{{$params['priority']}}</priority>
    </url>
    @endforeach
</urlset>

फ़ाइल एप \ Http \ Kernel.php में सुरक्षित $ मिडलवेयर एरे के लिए एक प्रविष्टि जोड़ें

'sitemap' => 'App\Http\Middleware\sitemap'

जांचें https://github.com/RoumenDamianoff/laravel-sitemap

Laravel 4 के लिए एक सरल साइटमैप जनरेटर

Route::get('sitemap', function(){

    // create new sitemap object
    $sitemap = App::make("sitemap");

    // set cache (key (string), duration in minutes (Carbon|Datetime|int), turn on/off (boolean))
    // by default cache is disabled
    $sitemap->setCache('laravel.sitemap', 3600);

    // check if there is cached sitemap and build new only if is not
    if (!$sitemap->isCached())
    {
         // add item to the sitemap (url, date, priority, freq)
         $sitemap->add(URL::to('/'), '2012-08-25T20:10:00+02:00', '1.0', 'daily');
         $sitemap->add(URL::to('page'), '2012-08-26T12:30:00+02:00', '0.9', 'monthly');

         // get all posts from db
         $posts = DB::table('posts')->orderBy('created_at', 'desc')->get();

         // add every post to the sitemap
         foreach ($posts as $post)
         {
            $sitemap->add($post->slug, $post->modified, $post->priority, $post->freq);
         }
    }

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

});

मैंने इसे इस्तेमाल किया है। बहुत अच्छा काम करता है!

अपडेट # 1

भ्रम को साफ करने के लिए, हम एक उदाहरण लेते हैं।

मान लें कि मेरे पास id , title , blog एक ब्लॉग तालिका है

मेरे पास मार्ग है, Route::get('blog/{blog}',['as' => 'blog.show', 'uses' => '[email protected]'];

पहले मैं सामग्री को $blogs = DB::table('blog')->get(); से प्राप्त करूँगा $blogs = DB::table('blog')->get();

$blogs में परिणाम होंगे

मैं सिर्फ पाश होगा,

foreach($blogs as $i)
{
     $sitemap->add(route('blog.show',[$i->title]), '2014-11-11', '1.0','daily');
}

मेरे सारे ब्लॉग साइटमैप में जोड़े जाते हैं







sitemap