2017 © Pedro Peláez
 

cakephp-plugin cakephp-sitemap

Sitemap Generator plugin for CakePHP 3.x apps

image

mpinchuk/cakephp-sitemap

Sitemap Generator plugin for CakePHP 3.x apps

  • Tuesday, July 11, 2017
  • by mpinchuk
  • Repository
  • 1 Watchers
  • 0 Stars
  • 11 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 3 Forks
  • 0 Open issues
  • 6 Versions
  • 0 % Grown

The README.md

cakephp-sitemap

Sitemap generator plugin for CakePHP 3x apps, (*1)

Installation

This package is available for easy installation through Packagist, (*2)

composer require mpinchuk/cakephp-sitemap "~1.0"

Then make sure to load the plugin normally in your app. e.g., (*3)

# somewhere in config/bootstrap.php

Plugin::load('Sitemap', [
    'routes' => true,
    ]);

Finally, set your configuration array (see below), (*4)

Configuration

The plugin will look for an array of info using Configure::read('Sitemap') so just make sure such an array is loaded during bootstrapping. The easiest way to do this is to add it to your config/app.php file., (*5)

There are two sections the plugin looks for static pages and dynamic pages., (*6)

Static Pages

Static pages are nested under Sitemap.static which expects an array of URLs. This can take any URL accepted by Router::url()., (*7)

    'Sitemap' => 
        'static' => 
            ['_name' => 'pages:about'],
            'http://example.com/search',
            ['controller'=>'Pages', 'action'=>'display', 'terms-of-service'],

Dynamic Pages

You can dynamically create links by nesting a group of config settings under Sitemap.dynamic, (*8)

    'Sitemap' => 
        'dynamic' => 
            'Items' =>  #the name of the model to get entities for
                'cachekey' => 'sitemap',    # cachekey to use (e.g. from Configure::read('Cache.sitemap'))
                'finders' => [ .. ],        # array of model-layer finders for getting entities
                'xmlTags' =>                # xml tags to output with each sitemap line
                    'loc' => 'url'              # default 'url'; entity attribute name, or array, or string
                    'priority' => 0.5           # default 0.5; 0 to 1 priority
                    'lastmod' => 'updated'      # default 'updated'; entity attribute giving lastmod time
                    'changefreq' => 'daily'     # default 'daily'; always, hourly, daily, weekly, yearly, never     


Example Configuration

Here's a sample configuration straight from one of the projects using this plugin, (*9)

    # .. in config/app.php
    ...,
    'Sitemap' => [
        'static' => [
            ['_name' => 'user-register'],
            ['_name' => 'user-resetpw'],
            ['_name' => 'user-login'],
            ['_name' => 'user-logout'],
            ['_name' => 'user-dashboard'],
            ['_name' => 'privacy'],
            ["_name" => "contact-us"],
            ["_name" => "rewards"],
            ["_name" => "terms-of-service"],
            ["_name" => "about-us"],            
            ["_name" => "search"],
        ],
        'dynamic' => [
            'Categories' => [
                'cacheKey' => 'sitemap',
                'finders' => [
                    'all' => [
                'condition' => [
                'Categories.enabled' => true
            ]
            ],
                ],
                'xmlTags'=> [
                    'loc' => 'permalink',
                    'priority' => '0.9',
                    'changefreq' => 'always',
                ],
            ],
            'Products' => [
                'cacheKey' => 'sitemap',
                'finders' => [
                    'all' => [
                'condition' => [
                'Products.enabled' => 'true',
                function ($exp) {
                                return $exp->notIn('Products.status', 
                    [
                       'Stalled', 
                       'Placed', 
                       'Lost to Competition', 
                       'Filled by Client', 
                       'Cancelled'
                    ]);
                            }
            ],
            ],
                ],
                'xmlTags'=> [
                    'loc' => [
                        'urlBody' => '/product',
                        'queryParams' => ['productId' => 'id'] // queryParam => CollumnNameInDb
                    ],
                    'priority' => '0.9',
                    'changefreq' => 'always',
                ],
            ],
        ],
    ],

which produces the following, (*10)

<urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
    <url>
        <loc>http://example.com/</loc>
        <changefreq>always</changefreq>
        <priority>1.0</priority>
    </url>
    <url>
        <loc>http://example.com/register</loc>
        <priority>0.5</priority>
        <changefreq>weekly</changefreq>
    </url>
    <url>
        <loc>http://example.com/reset-password</loc>
        <priority>0.5</priority>
        <changefreq>weekly</changefreq>
    </url>
    <url>
        <loc>http://example.com/login</loc>
        <priority>0.5</priority>
        <changefreq>weekly</changefreq>
    </url>
    <url>
        <loc>http://example.com/logout</loc>
        <priority>0.5</priority>
        <changefreq>weekly</changefreq>
    </url>
    <url>
        <loc>http://example.com/my-account</loc>
        <priority>0.5</priority>
        <changefreq>weekly</changefreq>
    </url>
    <url>
        <loc>http://example.com/privacy</loc>
        <priority>0.5</priority>
        <changefreq>weekly</changefreq>
    </url>
    <url>
        <loc>http://example.com/contact-us</loc>
        <priority>0.5</priority>
        <changefreq>weekly</changefreq>
    </url>
    <url>
        <loc>http://example.com/rewards</loc>
        <priority>0.5</priority>
        <changefreq>weekly</changefreq>
    </url>
    <url>
        <loc>http://example.com/terms-of-service</loc>
        <priority>0.5</priority>
        <changefreq>weekly</changefreq>
    </url>
    <url>
        <loc>http://example.com/about-us</loc>
        <priority>0.5</priority>
        <changefreq>weekly</changefreq>
    </url>
    <url>
        <loc>http://example.com/search/</loc>
        <priority>0.5</priority>
        <changefreq>weekly</changefreq>
    </url>
    <url>
        <loc>http://example.com/product/spice-widgets</loc>
        <priority>0.9</priority>
        <changefreq>always</changefreq>
    </url>
    <url>
        <loc>http://example.com/product/posh-widgets</loc>
        <priority>0.9</priority>
        <changefreq>always</changefreq>
    </url>
    <url>
        <loc>http://example.com/product?productId=45673</loc>
        <priority>0.9</priority>
        <changefreq>always</changefreq>
    </url>
    <url>
        <loc>http://example.com/product?productId=89654</loc>
        <priority>0.9</priority>
        <changefreq>always</changefreq>
    </url>
</urlset>

The Versions

11/07 2017

dev-master

9999999-dev

Sitemap Generator plugin for CakePHP 3.x apps

  Sources   Download

MIT

The Requires

 

The Development Requires

11/07 2017

1.0.4

1.0.4.0

Sitemap Generator plugin for CakePHP 3.x apps

  Sources   Download

MIT

The Requires

 

The Development Requires

18/07 2016

1.0.3

1.0.3.0

Sitemap Generator plugin for CakePHP 3.x apps

  Sources   Download

MIT

The Requires

 

The Development Requires

18/07 2016

1.0.2

1.0.2.0

Sitemap Generator plugin for CakePHP 3.x apps

  Sources   Download

The Requires

 

The Development Requires

07/07 2016

1.0.1

1.0.1.0

Sitemap Generator plugin for CakePHP 3.x apps

  Sources   Download

The Requires

 

The Development Requires

07/07 2016

1.0.0

1.0.0.0

Sitemap Generator plugin for CakePHP 3.x apps

  Sources   Download

The Requires

 

The Development Requires