root / drupal7 / sites / all / modules / pathauto / pathauto.api.php @ ba09eb79
1 | 85ad3d82 | Assos Assos | <?php
|
---|---|---|---|
2 | /**
|
||
3 | * @file
|
||
4 | * Documentation for pathauto API.
|
||
5 | *
|
||
6 | 790c5a62 | Assos Assos | * 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 | 85ad3d82 | Assos Assos | */
|
48 | |||
49 | 790c5a62 | Assos Assos | /**
|
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 | 85ad3d82 | Assos Assos | function hook_path_alias_types() { |
65 | 790c5a62 | Assos Assos | $objects['user/'] = t('Users'); |
66 | $objects['node/'] = t('Content'); |
||
67 | return $objects; |
||
68 | 85ad3d82 | Assos Assos | } |
69 | |||
70 | 790c5a62 | Assos Assos | /**
|
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 | 85ad3d82 | Assos Assos | function hook_pathauto($op) { |
98 | 790c5a62 | Assos Assos | 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 | 85ad3d82 | Assos Assos | } |
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 | } |