php - google - sitemap xml for free
generar sitemaps dinĂ¡micos en un proyecto laravel sin usar compositor (3)
revisa https://github.com/RoumenDamianoff/laravel-sitemap
Un generador de mapa de sitio simple para 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'');
});
lo he usado ¡Funciona genial!
actualización # 1
para despejar la confusión, tomemos un ejemplo.
digamos que tengo una tabla de blog con id
, title
, blog
tengo la ruta como, Route::get(''blog/{blog}'',[''as'' => ''blog.show'', ''uses'' => ''Blog@show''];
primero voy a buscar el contenido, por $blogs = DB::table(''blog'')->get();
$blogs
contendrá los resultados.
voy a hacer bucles,
foreach($blogs as $i)
{
$sitemap->add(route(''blog.show'',[$i->title]), ''2014-11-11'', ''1.0'',''daily'');
}
todos mis blogs se agregan en el mapa del sitio.
Quiero generar un Dynamic sitemap
del Dynamic sitemap
para mi proyecto laravel. Ya había buscado en muchos sitios para obtener una respuesta. algunos de ellos lo describen usando el compositor. No entendí cómo hacer eso. y en algunos otros sitios escribieron códigos para obtener URL de db en bucles. En mi proyecto db no guardé ninguna URL. mi proyecto es un sitio para médicos y pacientes. php / laravel codes for dynamic sitemap generation
¿alguien sabe cómo escribir php / laravel codes for dynamic sitemap generation
?
Editar
Soy un novato en laravel, así que no estoy familiarizado con este compositor. ¿alguien puede por favor decirme si descargo el laravel-sitemap-master.zip de github donde puedo extraerlo y guardarlo en mi directorio de proyectos? será de mucha ayuda si alguien responde esto.
Agregue esta línea a sus routes.php
Route::get(''/sitemap'', function()
{
return Response::view(''sitemap'')->header(''Content-Type'', ''application/xml'');
});
Crear nueva aplicación de archivo / Http / Middleware / 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);
}
}
Y cree un nuevo archivo de vista resources / 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>
Agregue una entrada a la matriz $ middleware protegida en la aplicación de archivo / Http / Kernel.php
''sitemap'' => ''App/Http/Middleware/sitemap''
Supongamos que quiere que el archivo sitemap.xml
su sitio web incluya enlaces a todos los médicos y pacientes que tenga en la base de datos, puede hacerlo así:
en el archivo routes.php ...
Route::get("sitemap.xml", array(
"as" => "sitemap",
"uses" => "HomeController@sitemap", // or any other controller you want to use
));
en el archivo HomeController.php (si decidiste usar HomeController) ..
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'');
}
en el archivo views / 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>