| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 | <?php/** * @file * Documentation for pathauto API. */use Drupal\Core\Language\Language;/** * @todo Update for 8.x-1.x * * It may be helpful to review some examples of integration from * pathauto.pathauto.inc. * * Pathauto works by using tokens in path patterns.  Thus the simplest * integration is just to provide tokens.  Token support is provided by Drupal * core. To provide additional token from your module, implement the following * hooks: * * hook_tokens() - http://api.drupal.org/api/function/hook_tokens * hook_token_info() - http://api.drupal.org/api/function/hook_token_info * * If you wish to provide pathauto integration for custom paths provided by your * module, there are a few steps involved. * * 1. hook_pathauto() *    Provide information required by pathauto for the settings form as well as *    bulk generation.  See the documentation for hook_pathauto() for more *    details. * * 2. pathauto_create_alias() *    At the appropriate time (usually when a new item is being created for *    which a generated alias is desired), call pathauto_create_alias() with the *    appropriate parameters to generate and create the alias. See the user, *    taxonomy, and node hook implementations in pathauto.module for examples. *    Also see the documentation for pathauto_create_alias(). * * 3. pathauto_path_delete_all() *    At the appropriate time (usually when an item is being deleted), call *    pathauto_path_delete_all() to remove any aliases that were created for the *    content being removed.  See the documentation for *    pathauto_path_delete_all() for more details. * * 4. hook_path_alias_types() *    For modules that create new types of content that can be aliased with *    pathauto, a hook implementation is needed to allow the user to delete them *    all at once.  See the documentation for hook_path_alias_types() below for *    more information. * * There are other integration points with pathauto, namely alter hooks that * allow you to change the data used by pathauto at various points in the * process.  See the below hook documentation for details. *//** * Alter pathauto alias type definitions. * * @param array &$definitions *   Alias type definitions. */function hook_path_alias_types_alter(array &$definitions) {}/** * Determine if a possible URL alias would conflict with any existing paths. * * Returning TRUE from this function will trigger pathauto_alias_uniquify() to * generate a similar URL alias with a suffix to avoid conflicts. * * @param string $alias *   The potential URL alias. * @param string $source *   The source path for the alias (e.g. 'node/1'). * @param string $langcode *   The language code for the alias (e.g. 'en'). * * @return bool *   TRUE if $alias conflicts with an existing, reserved path, or FALSE/NULL if *   it does not match any reserved paths. * * @see pathauto_alias_uniquify() */function hook_pathauto_is_alias_reserved($alias, $source, $langcode) {  // Check our module's list of paths and return TRUE if $alias matches any of  // them.  return (bool) \Drupal::database()->query("SELECT 1 FROM {mytable} WHERE path = :path", [':path' => $alias])->fetchField();}/** * Alter the pattern to be used before an alias is generated by Pathauto. * * This hook will only be called if a default pattern is configured (on * admin/config/search/path/patterns). * * @param string $pattern *   The alias pattern for Pathauto to pass to token_replace() to generate the *   URL alias. * @param array $context *   An associative array of additional options, with the following elements: *   - 'module': The module or entity type being aliased. *   - 'op': A string with the operation being performed on the object being *     aliased. Can be either 'insert', 'update', 'return', or 'bulkupdate'. *   - 'source': A string of the source path for the alias (e.g. 'node/1'). *   - 'data': An array of keyed objects to pass to token_replace(). *   - 'type': The sub-type or bundle of the object being aliased. *   - 'language': A string of the language code for the alias (e.g. 'en'). *     This can be altered by reference. */function hook_pathauto_pattern_alter(&$pattern, array $context) {  // Switch out any [node:created:*] tokens with [node:updated:*] on update.  if ($context['module'] == 'node' && ($context['op'] == 'update')) {    $pattern = preg_replace('/\[node:created(\:[^]]*)?\]/', '[node:updated$1]', $pattern);  }}/** * Alter Pathauto-generated aliases before saving. * * @param string $alias *   The automatic alias after token replacement and strings cleaned. * @param array $context *   An associative array of additional options, with the following elements: *   - 'module': The module or entity type being aliased. *   - 'op': A string with the operation being performed on the object being *     aliased. Can be either 'insert', 'update', 'return', or 'bulkupdate'. *   - 'source': A string of the source path for the alias (e.g. 'node/1'). *     This can be altered by reference. *   - 'data': An array of keyed objects to pass to token_replace(). *   - 'type': The sub-type or bundle of the object being aliased. *   - 'language': A string of the language code for the alias (e.g. 'en'). *     This can be altered by reference. *   - 'pattern': A string of the pattern used for aliasing the object. */function hook_pathauto_alias_alter(&$alias, array &$context) {  // Add a suffix so that all aliases get saved as 'content/my-title.html'  $alias .= '.html';  // Force all aliases to be saved as language neutral.  $context['language'] = Language::LANGCODE_NOT_SPECIFIED;}/** * Alter the list of punctuation characters for Pathauto control. * * @param $punctuation *   An array of punctuation to be controlled by Pathauto during replacement *   keyed by punctuation name. Each punctuation record should be an array *   with the following key/value pairs: *   - value: The raw value of the punctuation mark. *   - name: The human-readable name of the punctuation mark. This must be *     translated using t() already. */function hook_pathauto_punctuation_chars_alter(array &$punctuation) {  // Add the trademark symbol.  $punctuation['trademark'] = array('value' => '™', 'name' => t('Trademark symbol'));  // Remove the dollar sign.  unset($punctuation['dollar']);}
 |