root / drupal7 / sites / all / modules / pathauto / pathauto.api.php @ ba09eb79
1 |
<?php
|
---|---|
2 |
/**
|
3 |
* @file
|
4 |
* Documentation for pathauto API.
|
5 |
*
|
6 |
* It may be helpful to review some examples of integration from
|
7 |
* pathauto.pathauto.inc.
|
8 |
*
|
9 |
* Pathauto works by using tokens in path patterns. Thus the simplest
|
10 |
* integration is just to provide tokens. Token support is provided by Drupal
|
11 |
* core. To provide additional token from your module, implement the following
|
12 |
* hooks:
|
13 |
*
|
14 |
* hook_tokens() - http://api.drupal.org/api/function/hook_tokens
|
15 |
* hook_token_info() - http://api.drupal.org/api/function/hook_token_info
|
16 |
*
|
17 |
* If you wish to provide pathauto integration for custom paths provided by your
|
18 |
* module, there are a few steps involved.
|
19 |
*
|
20 |
* 1. hook_pathauto()
|
21 |
* Provide information required by pathauto for the settings form as well as
|
22 |
* bulk generation. See the documentation for hook_pathauto() for more
|
23 |
* details.
|
24 |
*
|
25 |
* 2. pathauto_create_alias()
|
26 |
* At the appropriate time (usually when a new item is being created for
|
27 |
* which a generated alias is desired), call pathauto_create_alias() with the
|
28 |
* appropriate parameters to generate and create the alias. See the user,
|
29 |
* taxonomy, and node hook implementations in pathauto.module for examples.
|
30 |
* Also see the documentation for pathauto_create_alias().
|
31 |
*
|
32 |
* 3. pathauto_path_delete_all()
|
33 |
* At the appropriate time (usually when an item is being deleted), call
|
34 |
* pathauto_path_delete_all() to remove any aliases that were created for the
|
35 |
* content being removed. See the documentation for
|
36 |
* pathauto_path_delete_all() for more details.
|
37 |
*
|
38 |
* 4. hook_path_alias_types()
|
39 |
* For modules that create new types of content that can be aliased with
|
40 |
* pathauto, a hook implementation is needed to allow the user to delete them
|
41 |
* all at once. See the documentation for hook_path_alias_types() below for
|
42 |
* more information.
|
43 |
*
|
44 |
* There are other integration points with pathauto, namely alter hooks that
|
45 |
* allow you to change the data used by pathauto at various points in the
|
46 |
* process. See the below hook documentation for details.
|
47 |
*/
|
48 |
|
49 |
/**
|
50 |
* Used primarily by the bulk delete form. This hooks provides pathauto the
|
51 |
* information needed to bulk delete aliases created by your module. The keys
|
52 |
* of the return array are used by pathauto as the system path prefix to delete
|
53 |
* from the url_aliases table. The corresponding value is simply used as the
|
54 |
* label for each type of path on the bulk delete form.
|
55 |
*
|
56 |
* @return
|
57 |
* An array whose keys match the beginning of the source paths
|
58 |
* (e.g.: "node/", "user/", etc.) and whose values describe the type of page
|
59 |
* (e.g.: "Content", "Users"). Like all displayed strings, these descriptions
|
60 |
* should be localized with t(). Use % to match interior pieces of a path,
|
61 |
* like "user/%/track". This is a database wildcard (meaning "user/%/track"
|
62 |
* matches "user/1/track" as well as "user/1/view/track").
|
63 |
*/
|
64 |
function hook_path_alias_types() { |
65 |
$objects['user/'] = t('Users'); |
66 |
$objects['node/'] = t('Content'); |
67 |
return $objects; |
68 |
} |
69 |
|
70 |
/**
|
71 |
* Provide information about the way your module's aliases will be built.
|
72 |
*
|
73 |
* The information you provide here is used to build the form
|
74 |
* on search/path/patterns. File pathauto.pathauto.inc provides example
|
75 |
* implementations for system modules.
|
76 |
*
|
77 |
* @see node_pathauto
|
78 |
*
|
79 |
* @param $op
|
80 |
* At the moment this will always be 'settings'.
|
81 |
*
|
82 |
* @return object|null
|
83 |
* An object, or array of objects (if providing multiple groups of path
|
84 |
* patterns). Each object should have the following members:
|
85 |
* - 'module': The module or entity type.
|
86 |
* - 'token_type': Which token type should be allowed in the patterns form.
|
87 |
* - 'groupheader': Translated label for the settings group
|
88 |
* - 'patterndescr': The translated label for the default pattern (e.g.,
|
89 |
* t('Default path pattern (applies to all content types with blank
|
90 |
* patterns below)')
|
91 |
* - 'patterndefault': Default pattern (e.g. 'content/[node:title]'
|
92 |
* - 'batch_update_callback': The name of function that should be ran for
|
93 |
* bulk update. @see node_pathauto_bulk_update_batch_process for example
|
94 |
* - 'batch_file': The name of the file with the bulk update function.
|
95 |
* - 'patternitems': Optional. An array of descritpions keyed by bundles.
|
96 |
*/
|
97 |
function hook_pathauto($op) { |
98 |
switch ($op) { |
99 |
case 'settings': |
100 |
$settings = array(); |
101 |
$settings['module'] = 'file'; |
102 |
$settings['token_type'] = 'file'; |
103 |
$settings['groupheader'] = t('File paths'); |
104 |
$settings['patterndescr'] = t('Default path pattern (applies to all file types with blank patterns below)'); |
105 |
$settings['patterndefault'] = 'files/[file:name]'; |
106 |
$settings['batch_update_callback'] = 'file_entity_pathauto_bulk_update_batch_process'; |
107 |
$settings['batch_file'] = drupal_get_path('module', 'file_entity') . '/file_entity.pathauto.inc'; |
108 |
|
109 |
foreach (file_type_get_enabled_types() as $file_type => $type) { |
110 |
$settings['patternitems'][$file_type] = t('Pattern for all @file_type paths.', array('@file_type' => $type->label)); |
111 |
} |
112 |
return (object) $settings; |
113 |
|
114 |
default:
|
115 |
break;
|
116 |
} |
117 |
} |
118 |
|
119 |
/**
|
120 |
* Determine if a possible URL alias would conflict with any existing paths.
|
121 |
*
|
122 |
* Returning TRUE from this function will trigger pathauto_alias_uniquify() to
|
123 |
* generate a similar URL alias with a suffix to avoid conflicts.
|
124 |
*
|
125 |
* @param string $alias
|
126 |
* The potential URL alias.
|
127 |
* @param string $source
|
128 |
* The source path for the alias (e.g. 'node/1').
|
129 |
* @param string $langcode
|
130 |
* The language code for the alias (e.g. 'en').
|
131 |
*
|
132 |
* @return bool
|
133 |
* TRUE if $alias conflicts with an existing, reserved path, or FALSE/NULL if
|
134 |
* it does not match any reserved paths.
|
135 |
*
|
136 |
* @see pathauto_alias_uniquify()
|
137 |
*/
|
138 |
function hook_pathauto_is_alias_reserved($alias, $source, $langcode) { |
139 |
// Check our module's list of paths and return TRUE if $alias matches any of
|
140 |
// them.
|
141 |
return (bool) db_query("SELECT 1 FROM {mytable} WHERE path = :path", array(':path' => $alias))->fetchField(); |
142 |
} |
143 |
|
144 |
/**
|
145 |
* Alter the pattern to be used before an alias is generated by Pathauto.
|
146 |
*
|
147 |
* This hook will only be called if a default pattern is configured (on
|
148 |
* admin/config/search/path/patterns).
|
149 |
*
|
150 |
* @param string $pattern
|
151 |
* The alias pattern for Pathauto to pass to token_replace() to generate the
|
152 |
* URL alias.
|
153 |
* @param array $context
|
154 |
* An associative array of additional options, with the following elements:
|
155 |
* - 'module': The module or entity type being aliased.
|
156 |
* - 'op': A string with the operation being performed on the object being
|
157 |
* aliased. Can be either 'insert', 'update', 'return', or 'bulkupdate'.
|
158 |
* - 'source': A string of the source path for the alias (e.g. 'node/1').
|
159 |
* - 'data': An array of keyed objects to pass to token_replace().
|
160 |
* - 'type': The sub-type or bundle of the object being aliased.
|
161 |
* - 'language': A string of the language code for the alias (e.g. 'en').
|
162 |
* This can be altered by reference.
|
163 |
*/
|
164 |
function hook_pathauto_pattern_alter(&$pattern, array $context) { |
165 |
// Switch out any [node:created:*] tokens with [node:updated:*] on update.
|
166 |
if ($context['module'] == 'node' && ($context['op'] == 'update')) { |
167 |
$pattern = preg_replace('/\[node:created(\:[^]]*)?\]/', '[node:updated$1]', $pattern); |
168 |
} |
169 |
} |
170 |
|
171 |
/**
|
172 |
* Alter Pathauto-generated aliases before saving.
|
173 |
*
|
174 |
* @param string $alias
|
175 |
* The automatic alias after token replacement and strings cleaned.
|
176 |
* @param array $context
|
177 |
* An associative array of additional options, with the following elements:
|
178 |
* - 'module': The module or entity type being aliased.
|
179 |
* - 'op': A string with the operation being performed on the object being
|
180 |
* aliased. Can be either 'insert', 'update', 'return', or 'bulkupdate'.
|
181 |
* - 'source': A string of the source path for the alias (e.g. 'node/1').
|
182 |
* This can be altered by reference.
|
183 |
* - 'data': An array of keyed objects to pass to token_replace().
|
184 |
* - 'type': The sub-type or bundle of the object being aliased.
|
185 |
* - 'language': A string of the language code for the alias (e.g. 'en').
|
186 |
* This can be altered by reference.
|
187 |
* - 'pattern': A string of the pattern used for aliasing the object.
|
188 |
*/
|
189 |
function hook_pathauto_alias_alter(&$alias, array &$context) { |
190 |
// Add a suffix so that all aliases get saved as 'content/my-title.html'
|
191 |
$alias .= '.html'; |
192 |
|
193 |
// Force all aliases to be saved as language neutral.
|
194 |
$context['language'] = LANGUAGE_NONE; |
195 |
} |
196 |
|
197 |
/**
|
198 |
* Alter the list of punctuation characters for Pathauto control.
|
199 |
*
|
200 |
* @param $punctuation
|
201 |
* An array of punctuation to be controlled by Pathauto during replacement
|
202 |
* keyed by punctuation name. Each punctuation record should be an array
|
203 |
* with the following key/value pairs:
|
204 |
* - value: The raw value of the punctuation mark.
|
205 |
* - name: The human-readable name of the punctuation mark. This must be
|
206 |
* translated using t() already.
|
207 |
*/
|
208 |
function hook_pathauto_punctuation_chars_alter(array &$punctuation) { |
209 |
// Add the trademark symbol.
|
210 |
$punctuation['trademark'] = array('value' => '™', 'name' => t('Trademark symbol')); |
211 |
|
212 |
// Remove the dollar sign.
|
213 |
unset($punctuation['dollar']); |
214 |
} |