array( 'label' => 'My module', 'base table' => 'mymodule', 'entity keys' => array( // Primary ID key on {base table}. 'id' => 'myid', // Subtype key on {base table}. 'bundle' => 'mysubtype', ), 'path callback' => 'mymodule_path', 'bundle label' => t('Subtype name'), 'bundles' => array( 'mysubtype1' => array( 'label' => t('My subtype 1'), 'admin' => array( 'real path' => 'admin/settings/mymodule/mysubtype1/edit', 'access arguments' => array('administer mymodule'), ), 'xmlsitemap' => array( 'status' => XMLSITEMAP_STATUS_DEFAULT, 'priority' => XMLSITEMAP_PRIORITY_DEFAULT, ), ), ), 'xmlsitemap' => array( // Callback function to take an array of IDs and save them as sitemap // links. 'process callback' => '', // Callback function used in batch API for rebuilding all links. 'rebuild callback' => '', // Callback function called from the XML sitemap settings page. 'settings callback' => '', ), ), ); } /** * Act on a sitemap link being inserted or updated. * * This hook is currently invoked from xmlsitemap_node_node_update() before * the node sitemap link is saved to the database with revoked access until * the node permissions are checked in the cron. * * @param array $link * An array with the data of the sitemap link. * @param array $context * An optional context array containing data related to the link. */ function hook_xmlsitemap_link_presave_alter(array &$link, array $context) { if ($link['type'] == 'mymodule') { $link['priority'] += 0.5; } } /** * Alter the data of a sitemap link before the link is saved. * * @param array $link * An array with the data of the sitemap link. * @param array $context * An optional context array containing data related to the link. */ function hook_xmlsitemap_link_alter(array &$link, array $context) { if ($link['type'] == 'mymodule') { $link['priority'] += 0.5; } } /** * Inform modules that an XML sitemap link has been created. * * @param array $link * Associative array defining an XML sitemap link as passed into * xmlsitemap_link_save(). * @param array $context * An optional context array containing data related to the link. * * @see hook_xmlsitemap_link_update() */ function hook_xmlsitemap_link_insert(array $link, array $context) { db_insert('mytable') ->fields(array( 'link_type' => $link['type'], 'link_id' => $link['id'], 'link_status' => $link['status'], )) ->execute(); } /** * Inform modules that an XML sitemap link has been updated. * * @param array $link * Associative array defining an XML sitemap link as passed into * xmlsitemap_link_save(). * @param array $context * An optional context array containing data related to the link. * * @see hook_xmlsitemap_link_insert() */ function hook_xmlsitemap_link_update(array $link, array $context) { db_update('mytable') ->fields(array( 'link_type' => $link['type'], 'link_id' => $link['id'], 'link_status' => $link['status'], )) ->execute(); } /** * Respond to XML sitemap link clearing and rebuilding. * * @param array $types * An array of link types that are being rebuilt. * @param bool $save_custom * If links with overridden status and/or priority are being removed or not. */ function hook_xmlsitemap_rebuild_clear(array $types, $save_custom) { db_delete('mytable') ->condition('link_type', $types, 'IN') ->execute(); } /** * Respond to XML sitemap regeneration. */ function hook_xmlsitemap_regenerate_finished() { } /** * Index links for the XML sitemaps. */ function hook_xmlsitemap_index_links($limit) { } /** * Provide information about contexts available to XML sitemap. * * @see hook_xmlsitemap_context_info_alter() */ function hook_xmlsitemap_context_info() { $info['vocabulary'] = array( 'label' => t('Vocabulary'), 'summary callback' => 'mymodule_xmlsitemap_vocabulary_context_summary', 'default' => 0, ); return $info; } /** * Alter XML sitemap context info. * * @see hook_xmlsitemap_context_info() */ function hook_xmlsitemap_context_info_alter(&$info) { $info['vocabulary']['label'] = t('Site vocabularies'); } /** * Provide information about the current context on the site. * * @see hook_xmlsitemap_context_alter() */ function hook_xmlsitemap_context() { $context = array(); if ($vid = mymodule_get_current_vocabulary()) { $context['vocabulary'] = $vid; } return $context; } /** * Alter the current context information. * * @see hook_xmlsitemap_context() */ function hook_xmlsitemap_context_alter(&$context) { if (user_access('administer taxonomy')) { unset($context['vocabulary']); } } /** * Provide options for the url() function based on an XML sitemap context. */ function hook_xmlsitemap_context_url_options(array $context) { } /** * Alter the url() options based on an XML sitemap context. */ function hook_xmlsitemap_context_url_options_alter(array &$options, array $context) { } /** * Alter the content added to an XML sitemap for an individual element. * * This hooks is called when the module is generating the XML content for the * sitemap and allows other modules to alter existing or add additional XML data * for any element by adding additional key value paris to the $element array. * * The key in the element array is then used as the name of the XML child * element to add and the value is the value of that element. For example: * * @code $element['video:title'] = 'Big Ponycorn'; @endcode * * Would result in a child element like Big Ponycorn * being added to the sitemap for this particular link. * * @param array $element * The element that will be converted to XML for the link. * @param array $link * An array of properties providing context about the link that we are * generating an XML element for. * @param object $sitemap * The sitemap that is currently being generated. */ function hook_xmlsitemap_element_alter(array &$element, array $link, $sitemap) { if ($link['subtype'] === 'video') { $node = node_load($link['id']); $element['video:video'] = array( 'video:title' => check_plain($node->title), 'video:description' => isset($node->body[LANGUAGE_NONE][0]['summary']) ? check_plain($node->body[LANGUAGE_NONE][0]['summary']) : check_plain($node->body[LANGUAGE_NONE][0]['value']), 'video:live' => 'no', ); } } /** * Alter the attributes used for the root element of the XML sitemap. * * For example add an xmlns:video attribute: * * @code * * @endcode * * @param array $attributes * An associative array of attributes to use in the root element of an XML * sitemap. * @param object $sitemap * The sitemap that is currently being generated. */ function hook_xmlsitemap_root_attributes_alter(array &$attributes, $sitemap) { $attributes['xmlns:video'] = 'https://www.google.com/schemas/sitemap-video/1.1'; } /** * Alter the query selecting data from {xmlsitemap} during sitemap generation. * * @param QueryAlterableInterface $query * A Query object describing the composite parts of a SQL query. * * @see hook_query_TAG_alter() */ function hook_query_xmlsitemap_generate_alter(QueryAlterableInterface $query) { $sitemap = $query->getMetaData('sitemap'); if (!empty($sitemap->context['vocabulary'])) { $node_condition = db_and(); $node_condition->condition('type', 'taxonomy_term'); $node_condition->condition('subtype', $sitemap->context['vocabulary']); $normal_condition = db_and(); $normal_condition->condition('type', 'taxonomy_term', '<>'); $condition = db_or(); $condition->condition($node_condition); $condition->condition($normal_condition); $query->condition($condition); } } /** * Provide information about XML sitemap bulk operations. */ function hook_xmlsitemap_sitemap_operations() { } /** * Respond to XML sitemap deletion. * * This hook is invoked from xmlsitemap_sitemap_delete_multiple() after the XML * sitemap has been removed from the table in the database. * * @param object $sitemap * The XML sitemap object that was deleted. */ function hook_xmlsitemap_sitemap_delete(stdClass $sitemap) { db_delete('mytable') ->condition('smid', $sitemap->smid, '=') ->execute(); } /** * @} End of "addtogroup hooks". */