README.md 8.34 KB
Newer Older
1
## CONTENTS OF THIS FILE ##
2 3 4 5 6

 * Introduction
 * Installation
 * Configuration
 * Usage
7
 * Extending the module
8 9 10
 * How Can You Contribute?
 * Maintainers

11
## INTRODUCTION ##
12

gbyte.co's avatar
gbyte.co committed
13
Author and maintainer: Pawel Ginalski (gbyte.co)
14 15
 * Drupal: https://www.drupal.org/u/gbyte.co
 * Personal: https://gbyte.co/
16

17 18
The module generates multilingual XML sitemaps which adhere to Google's new
hreflang standard. Out of the box the sitemaps index most of Drupal's
19
content entity types including:
20 21 22 23 24

 * nodes
 * taxonomy terms
 * menu links
 * users
25 26 27 28
 * ...

Contributed entity types like commerce products or media entities can be indexed
as well. On top of that custom links can be added to the sitemap.
29 30 31

To learn about XML sitemaps, see https://en.wikipedia.org/wiki/Sitemaps.

gbyte.co's avatar
gbyte.co committed
32 33 34
The module also provides an API allowing to create any type of sitemap (not
necessary an XML one) holding links to a local or remote source.

35
## INSTALLATION ##
36 37 38 39

See https://www.drupal.org/documentation/install/modules-themes/modules-8
for instructions on how to install or update Drupal modules.

40
## CONFIGURATION ##
41

42
### PERMISSIONS ###
43 44 45 46

The module permission 'administer sitemap settings' can be configured under
/admin/people/permissions.

47 48
### ENTITIES ###

49
Initially only the home page is indexed in the sitemap. To include content into
50 51 52
the sitemap, visit /admin/config/search/simplesitemap/entities to enable support
for entity types of your choosing. Entity types which feature bundles can then
be configured on a per-bundle basis, e.g.
53

54 55 56 57
 * /admin/structure/types/manage/[content type] for nodes
 * /admin/structure/taxonomy/manage/[taxonomy vocabulary] for taxonomy terms
 * /admin/structure/menu/manage/[menu] for menu items
 * ...
58

59 60
When including an entity type or bundle into the sitemap, the priority setting
can be set which will set the 'priority' parameter for all entities of that
gbyte.co's avatar
gbyte.co committed
61 62 63
type. Same goes for the 'changefreq' setting. All Images referenced by the
entities can be indexed as well. See https://en.wikipedia.org/wiki/Sitemaps to
learn more about these parameters.
64

65
Inclusion settings of bundles can be overridden on a per-entity
66 67
basis. Just head over to a bundle instance edit form (e.g. node/1/edit) to
override its sitemap settings.
gbyte.co's avatar
gbyte.co committed
68

69
If you wish for the sitemap to reflect the new configuration instantly, check
70
'Regenerate sitemaps after clicking save'. This setting only appears if a change
71 72 73
in the settings has been detected.

As the sitemap is accessible to anonymous users, bear in mind that only links
gbyte.co's avatar
gbyte.co committed
74 75
will be included which are accessible to anonymous users. There are no access
checks for links added through the module's hooks (see below).
76

77 78
### CUSTOM LINKS ###

79 80 81
To include custom links into the sitemap, visit
/admin/config/search/simplesitemap/custom.

82 83
### SETTINGS ###

84
The settings page can be found under admin/config/search/simplesitemap.
85
Here the module can be configured and the sitemaps can be manually regenerated.
86

87 88 89 90 91
#### VARIANTS ####

It is possible to have several sitemap instances of different sitemap types with
specific links accessible under certain URLs. These sitemap variants can be
configured under admin/config/search/simplesitemap/variants.
92

93
## USAGE ## 
94

95 96
The sitemaps are accessible to the whole world under [variant name]/sitemap.xml.
In addition to that, the default sitemap is accessible under /sitemap.xml.
97

98
If the cron generation is turned on, the sitemaps will be regenerated according
99
to the 'Sitemap generation interval' setting.
100

101 102
A manual generation is possible on admin/config/search/simplesitemap. This is
also the place that shows the overall and variant specific generation status.
103 104

The sitemap can be also generated via drush: Use the command
105 106 107 108 109 110 111 112 113 114 115 116 117
'drush simple-sitemap:generate' ('ssg'), or 'drush simple-sitemap:rebuild-queue'
('ssr').

Generation of hundreds of thousands of links can take time. Each variant gets
published as soon as all of its links have been generated. The previous version
of the sitemap variant is accessible during the generation process.

## EXTENDING THE MODULE ##

### API ###

There are API methods for altering stored inclusion settings, status queries and
programmatic sitemap generation. These include:
118

119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151
 * getSetting
 * saveSetting
 * setVariants
 * getSitemap
 * removeSitemap
 * generateSitemap
 * rebuildQueue
 * enableEntityType
 * disableEntityType
 * setBundleSettings
 * getBundleSettings
 * removeBundleSettings
 * supplementDefaultSettings
 * setEntityInstanceSettings
 * getEntityInstanceSettings
 * removeEntityInstanceSettings
 * bundleIsIndexed
 * entityTypeIsEnabled
 * addCustomLink
 * getCustomLinks
 * removeCustomLinks
 * getSitemapManager
    * getSitemapVariants
    * addSitemapVariant
    * removeSitemapVariants
 * getQueueWorker
    * deleteQueue
    * rebuildQueue
    * getInitialElementCount
    * getQueuedElementCount
    * getStashedResultCount
    * getProcessedElementCount
    * generationInProgress
152

153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172

These service methods can be chained like so:

```php
$generator = \Drupal::service('simple_sitemap.generator');

$generator
  ->getSitemapManager()
  ->addSitemapVariant('test');
  
$generator
  ->saveSetting('remove_duplicates', TRUE)
  ->enableEntityType('node')
  ->setVariants(['default', 'test'])
  ->setBundleSettings('node', 'page', ['index' => TRUE, 'priority' = 0.5])
  ->removeCustomLinks()
  ->addCustomLink('/some/view/page', ['priority' = 0.5])
  ->generateSitemap();
```

173 174 175
See https://gbyte.co/projects/simple-xml-sitemap and code documentation in 
Drupal\simple_sitemap\Simplesitemap for further details.

176
### API HOOKS ###
gbyte.co's avatar
gbyte.co committed
177 178

It is possible to hook into link generation by implementing
179
`hook_simple_sitemap_links_alter(&$links){}` in a custom module and altering the
gbyte.co's avatar
gbyte.co committed
180 181 182
link array shortly before it is transformed to XML.

Adding arbitrary links is possible through the use of
183
`hook_simple_sitemap_arbitrary_links_alter(&$arbitrary_links){}`. There are no
gbyte.co's avatar
gbyte.co committed
184 185 186 187
checks performed on these links (i.e. if they are internal/valid/accessible)
and parameters like priority/lastmod/changefreq have to be added manually.

Altering sitemap attributes and sitemap index attributes is possible through the
188 189 190 191 192
use of `hook_simple_sitemap_attributes_alter(&$attributes){}` and
`hook_simple_sitemap_index_attributes_alter(&$index_attributes){}`.

Altering URL generators is possible through
the use of `hook_simple_sitemap_url_generators_alter(&$generators){}`.
gbyte.co's avatar
gbyte.co committed
193

194 195
Altering sitemap generators is possible through
the use of `hook_simple_sitemap_sitemap_generators_alter(&$generators){}`.
196

197 198 199 200 201 202 203
Altering sitemap types is possible through
the use of `hook_simple_sitemap_sitemap_types_alter(&$generators){}`.

### WRITING PLUGINS ###

There are three types of plugins that allow to create any type of sitemap. See
the generator plugins included in this module and check the API docs
gbyte.co's avatar
gbyte.co committed
204 205 206
(https://www.drupal.org/docs/8/api/plugin-api/plugin-api-overview) to learn how
to implement plugins.

207
#### SITEMAP TYPE PLUGINS ####
gbyte.co's avatar
gbyte.co committed
208

209 210 211
This plugin defines a sitemap type. A sitemap type consists of a sitemap
generator and several URL generators. This plugin is very simple, as it
only requires some class annotation to define which sitemap/URL plugins to use.
gbyte.co's avatar
gbyte.co committed
212

213
#### SITEMAP GENERATOR PLUGINS ####
gbyte.co's avatar
gbyte.co committed
214

215 216
This plugin defines how a sitemap type is supposed to look. It handles all
aspects of the sitemap except its links/URLs.
gbyte.co's avatar
gbyte.co committed
217

218
#### URL GENERATOR PLUGINS ####
gbyte.co's avatar
gbyte.co committed
219

220
This plugin defines a way of generating URLs for one or more sitemap types.
gbyte.co's avatar
gbyte.co committed
221

222 223 224 225 226 227 228
Note:
Overwriting the default EntityUrlGenerator for a single entity type is possible
through the flag "overrides_entity_type" = "[entity_type_to_be_overwritten]" in
the settings array of the new generator plugin's annotation. See how the
EntityUrlGenerator is overwritten by the EntityMenuLinkContentUrlGenerator to
facilitate a different logic for menu links.

229 230
See https://gbyte.co/projects/simple-xml-sitemap for further details.

231
## HOW CAN YOU CONTRIBUTE? ##
232

233
 * Report any bugs, feature or support requests in the issue tracker; if
234
   possible help out by submitting patches.
235 236 237 238 239 240
   http://drupal.org/project/issues/simple_sitemap

 * Do you know a non-English language? Help translating the module.
   https://localize.drupal.org/translate/projects/simple_sitemap

 * If you would like to say thanks and support the development of this module, a
gbyte.co's avatar
gbyte.co committed
241
   donation will be much appreciated.
242
   https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=5AFYRSBLGSC3W
243 244
   
 * Feel free to contact me for paid support: https://gbyte.co/contact
245

246
## MAINTAINERS ##
247 248 249

Current maintainers:
 * Pawel Ginalski (gbyte.co) - https://www.drupal.org/u/gbyte.co