diff --git a/modules/comment.page_title.inc b/modules/comment.page_title.inc
index 91e83d9..cffd85e 100644
--- a/modules/comment.page_title.inc
+++ b/modules/comment.page_title.inc
@@ -31,6 +31,8 @@ function comment_page_title_alter(&$title) {
* Implementation of hook_page_title_pattern_alter().
*/
function comment_page_title_pattern_alter(&$pattern, &$types) {
+ global $language;
+
// Comment reply page
if (arg(0) == 'comment' && arg(1) == 'reply' && is_numeric(arg(2))) {
// The node ID position is in arg 2...
@@ -46,11 +48,11 @@ function comment_page_title_pattern_alter(&$pattern, &$types) {
if (($pid = arg(3)) && $comment = _comment_load($pid)) {
// Reply to comment...
$types['comment'] = $comment;
- $pattern = variable_get('page_title_comment_child_reply', '');
+ $pattern = variable_get('page_title_comment_child_reply_'.$language->language, '');
}
else {
// Reply to node...
- $pattern = variable_get('page_title_comment_reply', '');
+ $pattern = variable_get('page_title_comment_reply_'.$language->language, '');
}
}
}
diff --git a/modules/forum.page_title.inc b/modules/forum.page_title.inc
index ca4658c..a8e8bfe 100644
--- a/modules/forum.page_title.inc
+++ b/modules/forum.page_title.inc
@@ -25,17 +25,26 @@ function forum_page_title_alter(&$title) {
* Implementation of hook_page_title_pattern_alter().
*/
function forum_page_title_pattern_alter(&$pattern, &$types) {
+ global $language;
+
+ // Setting up keys
+ $default_forum_vocab_pattern_key = 'page_title_vocab';
+ $default_forum_root_pattern_key = 'page_title_forum_root_title';
+
// Forums Page title Patterns
if (arg(0) == 'forum') {
// If there is a numeric argument, then we're viewing a container or forum
if (is_numeric(arg(1))) {
$types['taxonomy'] = taxonomy_get_term(arg(1));
$forum_vid = variable_get('forum_nav_vocabulary', '');
- $pattern = variable_get('page_title_vocab_'. $forum_vid, '');
+ $lang_pattern_key = !empty($language) ? $default_forum_vocab_pattern_key. '_' .$forum_vid . '_' . $language->language : $default_forum_vocab_pattern_key;
}
// Otherwise its the root - lets grab the root pattern.
else {
- $pattern = variable_get('page_title_forum_root_title', '');
+ $lang_pattern_key = !empty($language) ? $default_forum_root_pattern_key. '_' .$language->language : $default_forum_root_pattern_key;
}
+
+ // Get the right pattern in function of the determined key above
+ $pattern = variable_get($lang_pattern_key, '');
}
}
diff --git a/modules/node.page_title.inc b/modules/node.page_title.inc
index e67a572..7834408 100644
--- a/modules/node.page_title.inc
+++ b/modules/node.page_title.inc
@@ -15,7 +15,8 @@ function node_page_title_alter(&$title) {
// Get the node
$node = menu_get_object('node');
- // If the node has a custom page title and the node type is configured to have a custom page title (ie, it's not a leftover from a previous setting), then use it.
+ // If the node has a custom page title and the node type is configured to have a custom page title
+ // (ie, it's not a leftover from a previous setting), then use it.
if (!empty($node->page_title) && variable_get('page_title_type_'. $node->type .'_showfield', 0)) {
$title = $node->page_title;
}
@@ -29,13 +30,28 @@ function node_page_title_alter(&$title) {
function node_page_title_pattern_alter(&$pattern, &$types) {
if ((arg(0) == 'node' && is_numeric(arg(1)))) {
$types['node'] = menu_get_object();
+
+ // if a page title has been set for the viewed node and showfield is enabled, then get it
+ // else get the right pattern
+ if( !empty($types['node']->page_title) && variable_get('page_title_type_'. $types['node']->type .'_showfield', 0)) {
+ $pattern = $types['node']->page_title;
+ } else {
+ // If a language exists for this node, we try to use page title pattern related to that language
+ // If the title pattern for that language is empty, we use the default one
+ global $language;
+
+ // Setting up keys
+ $default_pattern_key = 'page_title_type_'. $types['node']->type;
+ $lang_pattern_key = !empty($language) ? $default_pattern_key . '_' . $language->language : $default_pattern_key;
+
+ // Get the right pattern in function of the determined key above
+ $pattern = variable_get($lang_pattern_key, $default_pattern_key);
+ }
// If the node has any taxonomy, grab the first time and pass it over to be passed as a token.
// TODO: Handle multiple terms? Only pass specific terms per content type?
if (!empty($types['node']->taxonomy)) {
$types['taxonomy'] = current($types['node']->taxonomy);
}
-
- $pattern = variable_get('page_title_type_'. $types['node']->type, '');
}
}
diff --git a/modules/page_title.page_title.inc b/modules/page_title.page_title.inc
index cd03e37..87301bb 100644
--- a/modules/page_title.page_title.inc
+++ b/modules/page_title.page_title.inc
@@ -29,7 +29,13 @@ function page_title_page_title_alter(&$title) {
function page_title_page_title_pattern_alter(&$pattern, &$data = array()) {
// If frontpage, then use the frontpage pattern and set the title.
if (drupal_is_front_page()) {
- // Get the frontpage pattern
- $pattern = variable_get('page_title_front', '[site-name] | [site-slogan]');
+ global $language;
+
+ // Setting up keys
+ $default_pattern_key = 'page_title_front';
+ $lang_pattern_key = 'page_title_front'. '_' . $language->language;
+
+ // Get pattern
+ $pattern = variable_get($lang_pattern_key , '[site-name] | [site-slogan]');
}
}
diff --git a/modules/taxonomy.page_title.inc b/modules/taxonomy.page_title.inc
index ae86426..26c9bd1 100644
--- a/modules/taxonomy.page_title.inc
+++ b/modules/taxonomy.page_title.inc
@@ -27,7 +27,10 @@ function taxonomy_page_title_alter(&$title) {
function taxonomy_page_title_pattern_alter(&$pattern, &$types) {
// Taxonomy Term Page
if (arg(0) == 'taxonomy' && arg(1) == 'term' && is_numeric(arg(2)) && module_exists('taxonomy')) {
+ global $language;
+ // Setting up keys
+ $default_taxonomy_pattern_key = 'page_title_vocab';
$types['taxonomy'] = taxonomy_get_term(arg(2));
- $pattern = variable_get('page_title_vocab_'. $types['taxonomy']->vid, '');
+ $pattern = variable_get($default_taxonomy_pattern_key . ' ' . $types['taxonomy']->vid . '_' . $language->language, '');
}
}
diff --git a/modules/user.page_title.inc b/modules/user.page_title.inc
index 1b96364..741abc4 100644
--- a/modules/user.page_title.inc
+++ b/modules/user.page_title.inc
@@ -24,14 +24,23 @@ function user_page_title_alter(&$title) {
* Implementation of hook_page_title_pattern_alter().
*/
function user_page_title_pattern_alter(&$pattern, &$types) {
+ global $language;
+
+ // Setting up keys
+ $default_user_pattern_key = 'page_title_user';
+ $default_blog_pattern_key = 'page_title_blog';
+ $lang_pattern_user_key = !empty($language) ? $default_user_pattern_key . '_' . $language->language : $default_user_pattern_key;
+ $lang_pattern_blog_key = !empty($language) ? $default_blog_pattern_key . '_' . $language->language : $default_blog_pattern_key;
+
// User
if (arg(0) == 'user' && is_numeric(arg(1))) {
$types['user'] = user_load(array('uid' => arg(1)));
- $pattern = variable_get('page_title_user', '');
+ $pattern = variable_get($lang_pattern_user_key, '');
}
+
// Blog
elseif (arg(0) == 'blog' && is_numeric(arg(1))) {
$types['user'] = user_load(array('uid' => arg(1)));
- $pattern = variable_get('page_title_blog', '');
+ $pattern = variable_get($lang_pattern_blog_key, '');
}
}
diff --git a/page_title-admin-settings-form.tpl.php b/page_title-admin-settings-form.tpl.php
index 850891c..1bb1fd2 100644
--- a/page_title-admin-settings-form.tpl.php
+++ b/page_title-admin-settings-form.tpl.php
@@ -3,7 +3,7 @@
/**
* @file
- * Tempalte file for the admin settings form. Displays configuration in a neat table
+ * Template file for the admin settings form. Displays configuration in a neat table
*/
$rows = array();
@@ -15,9 +15,10 @@ foreach (element_children($form['pattern']) as $key) {
'#required' => $form['pattern'][$key]['#required'],
);
unset($form['pattern'][$key]['#title']);
-
+
$row = array(
array('data' => drupal_render($title), 'class' => 'page-type'),
+ array('data' => drupal_render($form['language'][$key]), 'class' => 'language'),
array('data' => drupal_render($form['scope'][$key]), 'class' => 'scope'),
);
if (isset($form['showfield'][$key .'_showfield'])) {
@@ -28,17 +29,17 @@ foreach (element_children($form['pattern']) as $key) {
$row[] = array('data' => drupal_render($form['pattern'][$key]), 'colspan' => 2, 'class' => 'pattern');
}
- $rows[] = $row;
+$rows[] = $row;
}
$headers = array(
array('data' => t('Page Type'), 'class' => 'page-type'),
+ array('data' => t('Language'), 'class' => 'language'),
array('data' => t('Token Scope'), 'class' => 'scope'),
array('data' => t('Pattern'), 'class' => 'pattern'),
- array('data' => t('Show Field'), 'class' => 'showfie;d'),
+ array('data' => t('Show Field'), 'class' => 'showfield'),
);
-
drupal_add_css(drupal_get_path('module', 'page_title') .'/page_title.admin.css', 'module', 'all', FALSE);
print theme('table', $headers, $rows, array('id' => 'page-title-settings'));
diff --git a/page_title.admin.css b/page_title.admin.css
index fd73b35..73d727f 100644
--- a/page_title.admin.css
+++ b/page_title.admin.css
@@ -1,10 +1,15 @@
+table#page-title-settings thead th { text-align:center; }
+
table#page-title-settings th.showfield { text-align:center; }
table#page-title-settings th.scope { text-align:center; }
-table#page-title-settings th.page-type { text-align:right; }
+table#page-title-settings th.page-type { text-align:left; }
table#page-title-settings td.showfield { width:10%; text-align:center; }
table#page-title-settings td.scope { text-align:center; }
-table#page-title-settings td.page-type { text-align:right; }
+table#page-title-settings td.language { text-align:center; }
+table#page-title-settings td.page-type { text-align:left; }
+
+table#page-title-settings td input { width: 95%; }
div.view-list-page-titles th.views-field-nid { width:5%; }
div.view-list-page-titles th.views-field-edit-node { width:20%; }
diff --git a/page_title.admin.inc b/page_title.admin.inc
index 5ef7c95..3debc9e 100644
--- a/page_title.admin.inc
+++ b/page_title.admin.inc
@@ -13,10 +13,10 @@
* array A structured array for use with Forms API.
*/
function page_title_admin_settings() {
+
// Define a default looking 'form element' for setting.
$showfield_form_element = array('#type' => 'checkbox', );
-
// Define a default looking 'form element' for setting.
$pattern_form_element = array(
'#type' => 'textfield',
@@ -24,147 +24,251 @@ function page_title_admin_settings() {
'#maxlength' => 256,
);
-
- // Set the theme callback for the patterns section
- $form['patterns'] = array(
+ // Set the theme callback for the general patterns
+ $form['patterns']['general'] = array(
+ '#type' => 'fieldset',
+ '#title' => t('General Title Patterns'),
+ '#collapsible' => FALSE,
+ '#theme' => 'page_title_admin_settings'
+ );
+
+ // Set the theme callback for the content type patterns section
+ $form['patterns']['content_type'] = array(
'#type' => 'fieldset',
- '#title' => t('Page Title Patterns'),
+ '#title' => t('Content Types Patterns'),
'#collapsible' => TRUE,
+ '#collapsed' => TRUE,
'#theme' => 'page_title_admin_settings'
);
-
-
- // Define the basic scope column values
- $form['patterns']['scope'] = array(
- 'page_title_default' => array('#type' => 'markup', '#value' => t('Global'), ),
- 'page_title_front' => array('#type' => 'markup', '#value' => t('Global'), ),
- 'page_title_comment_reply' => array('#type' => 'markup', '#value' => t('Node'), ),
- 'page_title_comment_child_reply' => array('#type' => 'markup', '#value' => t('Node') .'
'. t('Comment'), ),
- 'page_title_pager_pattern' => array('#type' => 'markup', '#value' => t('Global'), ),
- 'page_title_user' => array('#type' => 'markup', '#value' => t('User'), ),
+
+ // Set the theme callback for the taxonomy section
+ $form['patterns']['taxonomy'] = array(
+ '#type' => 'fieldset',
+ '#title' => t('Taxonomy Title Patterns'),
+ '#collapsible' => TRUE,
+ '#collapsed' => TRUE,
+ '#theme' => 'page_title_admin_settings'
);
+
+ // Set the theme callback for the specific section
+ $form['patterns']['specific'] = array(
+ '#type' => 'fieldset',
+ '#title' => t('More Title Patterns'),
+ '#collapsible' => TRUE,
+ '#collapsed' => TRUE,
+ '#theme' => 'page_title_admin_settings'
+ );
+
+ // List of all enabled languages
+ if (module_exists('locale')) {
+ $langs = locale_language_list();
+ } else {
+ $langs = array();
+ }
-
- // Define the 'default' token patterns
- $form['patterns']['pattern'] = array(
- //Define the default pattern - this is a "fallback" pattern.
- 'page_title_default' => array(
+ // PATTERNS THAT DON'T NEED LOCALISATION
+ // Define the default pattern - this is a "fallback" pattern.
+ $form['patterns']['general']['pattern']['page_title_default'] = array(
'#title' => t('Default'),
'#default_value' => variable_get('page_title_default', '[page-title] | [site-name]'),
'#required' => TRUE,
- '#description' => t('This pattern will be used as a fallback (ie, when no other pattern is defined)'),
- ) + $pattern_form_element,
-
+ '#description' => t('Pattern used as a fallback (ie, when no other pattern is defined)'),
+ ) + $pattern_form_element;
+ $form['patterns']['general']['scope']['page_title_default'] = array('#type' => 'markup', '#value' => t('Global'), );
+ $form['patterns']['general']['language']['page_title_default'] = array('#type' => 'markup', '#value' => t('Independant'), );
+
+ // Fallback for Frontpage
+ // @TODO verify that a frontpage can be language independant in some cases (maybe with Panel Nodes)
+ // else this is useless
+ $key = 'page_title_front';
+ $form['patterns']['general']['scope'][$key] = array('#type' => 'markup', '#value' => t('Global'), );
+ $form['patterns']['general']['language'][$key] = array('#type' => 'markup', '#value' => t('Independant'), );
+ $form['patterns']['general']['pattern'][$key] = array(
+ '#title' => t('Frontpage'),
+ '#default_value' => variable_get($key, ''),
+ '#description' => t('Pattern used as a fallback for the frontpage
(ie, when no other pattern is defined for the frontpage)'),
+ ) + $pattern_form_element;
+
+ // User profile default, no pattern => used for showfield
+ $key = 'page_title_user';
+ $form['patterns']['general']['scope'][$key] = array('#type' => 'markup', '#value' => t('User'), );
+ $form['patterns']['general']['language'][$key] = array('#type' => 'markup', '#value' => t('Independant'), );
+ $form['patterns']['general']['pattern'][$key] = array(
+ '#title' => t('User Profile'),
+ '#default_value' => t('No pattern possible'),
+ );
+ $form['patterns']['general']['showfield'][$key .'_showfield'] = array(
+ '#default_value' => variable_get($key .'_showfield', 0),
+ ) + $showfield_form_element;
+
+ // PATTERNS THAT NEED LOCALISATION
+ foreach ($langs as $langcode => $langname){
+
+ ////////////////////////////////////////////////////////
+ // GENERAL PATTERNS
+
// Define the frontpage pattern. This is use on
- 'page_title_front' => array(
- '#title' => t('Frontpage'),
- '#default_value' => variable_get('page_title_front', '[site-name] | [site-slogan]'),
- '#description' => t('This pattern will be used for the site frontpage'),
- ) + $pattern_form_element,
-
+ $lang_key = 'page_title_front' . '_' . $langcode;
+ $form['patterns']['general']['pattern'][$lang_key] = array(
+ '#default_value' => variable_get($lang_key, '[site-name] | [site-slogan]'),
+ '#description' => t('Pattern used for the site frontpage'),
+ ) + $pattern_form_element;
+ $form['patterns']['general']['scope'][$lang_key] = array('#type' => 'markup', '#value' => t('Global'), );
+ $form['patterns']['general']['language'][$lang_key] = array('#type' => 'markup', '#value' => t('%lang', array('%lang' => $langname)), );
+
+ // Define the user profile page pattern. This is used on any 'user/[0-9]' pages
+ if (module_exists('profile')) {
+ $lang_key = 'page_title_user' . '_' . $langcode;
+ $form['patterns']['general']['pattern'][$lang_key] = array(
+ '#default_value' => variable_get($lang_key, ''),
+ '#description' => t('Pattern used for any user profile pages'),
+ ) + $pattern_form_element;
+ $form['patterns']['general']['scope'][$lang_key] = array('#type' => 'markup', '#value' => t('User'), );
+ $form['patterns']['general']['language'][$lang_key] = array('#type' => 'markup', '#value' => t('%lang', array('%lang' => $langname)), );
+ }
+
+ // Add the blog homepage pattern field
+ if (module_exists('blog')) {
+ $lang_key = 'page_title_blog' . '_' . $langcode;
+ $form['patterns']['general']['pattern'][$lang_key] = array(
+ '#title' => t('Blog Homepage'),
+ '#default_value' => variable_get($lang_key, ''),
+ '#description' => t('Pattern used for a users blog page (ie /blog/1)'),
+ ) + $pattern_form_element;
+ $form['patterns']['general']['scope'][$lang_key] = array('#type' => 'markup', '#value' => t('User'), );
+ $form['patterns']['general']['language'][$lang_key] = array('#type' => 'markup', '#value' => t('%lang', array('%lang' => $langname)), );
+ }
+
+ // Add the forum root pattern field
+ if (module_exists('forum')) {
+ $lang_key = 'page_title_forum_root_title' . '_' . $langcode;
+ $form['patterns']['general']['pattern'][$lang_key] = array(
+ '#title' => t('Forum Root'),
+ '#default_value' => variable_get($lang_key, ''),
+ '#description' => t('Pattern used on the forum root page (ie, /forum)'),
+ ) + $pattern_form_element;
+ $form['patterns']['general']['scope'][$lang_key] = array('#type' => 'markup', '#value' => t('Global'));
+ $form['patterns']['general']['language'][$lang_key] = array('#type' => 'markup', '#value' => t('%lang', array('%lang' => $langname)), );
+ }
+
+ /////////////////////////////////////////////////////
+ // SPECIFIC PATTERNS
+
// Define the pager pattern. This is appended to any page requests containing 'page=[0-9]+' in the query string
- 'page_title_pager_pattern' => array(
+ $lang_key = 'page_title_pager_pattern' . '_' . $langcode;
+ $form['patterns']['specific']['pattern'][$lang_key] = array(
'#title' => t('Pager Suffix'),
- '#default_value' => variable_get('page_title_pager_pattern', ''),
- '#description' => t('This pattern will be appended to a page title for any given page with a pager on it'),
- ) + $pattern_form_element,
-
+ '#default_value' => variable_get($lang_key, ''),
+ '#description' => t('Pattern appended to a page title for any given page with a pager on it'),
+ ) + $pattern_form_element;
+ $form['patterns']['specific']['scope'][$lang_key] = array('#type' => 'markup', '#value' => t('Global'), );
+ $form['patterns']['specific']['language'][$lang_key] = array('#type' => 'markup', '#value' => t('%lang', array('%lang' => $langname)), );
+
// Define the comment reply pattern. This is used for a root comment reply (ie comment/[0-9]+).
- 'page_title_comment_reply' => array(
+ $lang_key = 'page_title_comment_reply' . '_' . $langcode;
+ $form['patterns']['specific']['pattern'][$lang_key] = array(
'#title' => t('Comment Reply'),
- '#default_value' => variable_get('page_title_comment_reply', ''),
- '#description' => t('This pattern will be used for comment reply pages, where the reply is directly to a "node"'),
- ) + $pattern_form_element,
-
+ '#default_value' => variable_get($lang_key, ''),
+ '#description' => t('Pattern used for comment reply pages, where the reply is directly to a "node"'),
+ ) + $pattern_form_element;
+ $form['patterns']['specific']['scope'][$lang_key] = array('#type' => 'markup', '#value' => t('Node'), );
+ $form['patterns']['specific']['language'][$lang_key] = array('#type' => 'markup', '#value' => t('%lang', array('%lang' => $langname)), );
+
// Define the comment reply to comment pattern. This is used for a reply to a comment (ie comment/[0-9]+/[0-9]+).
- 'page_title_comment_child_reply' => array(
+ $lang_key = 'page_title_comment_child_reply' . '_' . $langcode;
+ $form['patterns']['specific']['pattern'][$lang_key] = array(
'#title' => t('Comment Child Reply'),
- '#default_value' => variable_get('page_title_comment_child_reply', ''),
- '#description' => t('This pattern with be used for comment reply pages where the reply is to an existing "comment" (eg a comment thread)'),
- ) + $pattern_form_element,
-
- // Define the user profile page pattern. This is used on any 'user/[0-9]' pages
- 'page_title_user' => array(
- '#title' => t('User Profile'),
- '#default_value' => variable_get('page_title_user', ''),
- '#description' => t('This pattern will be used for any user profile pages'),
- ) + $pattern_form_element,
- );
-
-
- // Define the "showfield" checkbox for the user profile page
- $form['patterns']['showfield']['page_title_user_showfield'] = array(
- '#default_value' => variable_get('page_title_user_showfield', 0),
- ) + $showfield_form_element;
-
-
- // Definate the patterns per-node-type
- $types = node_get_types();
- foreach ($types as $type) {
- // Define the node-type key
- $key = 'page_title_type_'. $type->type;
-
- // Pattern entry
- $form['patterns']['pattern'][$key] = array(
- '#title' => t('Content Type - %type', array('%type' => $type->name)),
- '#default_value' => variable_get($key, ''),
- '#description' => t('This pattern will be used for all %type node-type pages', array('%type' => $type->name)),
+ '#default_value' => variable_get($lang_key, ''),
+ '#description' => t('Pattern used for comment reply pages where the reply is to an existing "comment"
(eg a comment thread)'),
) + $pattern_form_element;
-
- $form['patterns']['showfield'][$key .'_showfield'] = array(
- '#default_value' => variable_get($key .'_showfield', 0),
- ) + $showfield_form_element;
-
- $form['patterns']['scope'][$key] = array('#type' => 'markup', '#value' => t('Node'), );
- }
-
-
- // Definate the patterns per-vocab-type - if Taxonomy Module is enabled
+ $form['patterns']['specific']['scope'][$lang_key] = array('#type' => 'markup', '#value' => t('Node Comment'), );
+ $form['patterns']['specific']['language'][$lang_key] = array('#type' => 'markup', '#value' => t('%lang', array('%lang' => $langname)), );
+
+ }; // end foreach $langs
+
+
+ /////////////////////////////////////////////////////
+ // TAXONOMY PATTERNS
+ // Define the patterns per-vocab-type - if Taxonomy Module is enabled
if (module_exists('taxonomy')) {
+
$vocabs = taxonomy_get_vocabularies();
foreach ($vocabs as $vocab) {
+
// Define the vocab key
- $key = 'page_title_vocab_'. $vocab->vid;
-
- // Pattern entry
- $form['patterns']['pattern'][$key] = array(
+ $key = 'page_title_taxonomy_term'. '_' . $vocab->vid;
+
+ // Taxonomy default, no pattern => used for showfield
+ $form['patterns']['taxonomy']['scope'][$key] = array('#type' => 'markup', '#value' => t('Taxonomy'), );
+ $form['patterns']['taxonomy']['language'][$key] = array('#type' => 'markup', '#value' => t('Independant'), );
+ $form['patterns']['taxonomy']['pattern'][$key] = array(
'#title' => t('Vocabulary - %vocab_name', array('%vocab_name' => $vocab->name)),
- '#default_value' => variable_get($key, ''),
- '#description' => t('This pattern will be used for all %title term pages', array('%title' => $vocab->name)),
- ) + $pattern_form_element;
-
- $form['patterns']['showfield'][$key .'_showfield'] = array(
- '#default_value' => variable_get($key .'_showfield', 0),
+ '#default_value' => t('No pattern possible'),
+ );
+ $form['patterns']['taxonomy']['showfield'][$key .'_showfield'] = array(
+ '#default_value' => variable_get($key .'_showfield', 0),
) + $showfield_form_element;
-
- $form['patterns']['scope'][$key] = array('#type' => 'markup', '#value' => t('Taxonomy'), );
+
+ // We define patterns for all the languages available in Drupal
+ foreach ($langs as $langcode => $langname){
+ // Key language dependant variables : pattern
+ $lang_key = $key . '_' . $langcode;
+
+ // Pattern entry
+ $form['patterns']['taxonomy']['pattern'][$lang_key] = array(
+ '#default_value' => variable_get($lang_key, ''),
+ '#description' => t('Pattern used for all %title term pages', array('%title' => $vocab->name)),
+ ) + $pattern_form_element;
+ $form['patterns']['taxonomy']['language'][$lang_key] = array('#type' => 'markup', '#value' => t('%lang', array('%lang' => $langname)), );
+ $form['patterns']['taxonomy']['scope'][$lang_key] = array('#type' => 'markup', '#value' => t('Taxonomy'), );
+ }
+
}
}
+
+ /////////////////////////////////////////////////////
+ // CONTENT TYPES PATTERNS
+ // Define the patterns per-node-type
+ $types = node_get_types();
+ foreach ($types as $type) {
+
+ // Define the node-type key
+ $key = 'page_title_type_'. $type->type;
-
- // Add the blog homepage pattern field
- if (module_exists('blog')) {
- $key = 'page_title_blog';
- $form['patterns']['pattern'][$key] = array(
- '#title' => t('Blog Homepage'),
+ // Pattern entry
+ $form['patterns']['content_type']['scope'][$key] = array('#type' => 'markup', '#value' => t('Node'), );
+ $form['patterns']['content_type']['language'][$key] = array('#type' => 'markup', '#value' => t('Independant'), );
+ $form['patterns']['content_type']['pattern'][$key] = array(
+ '#title' => t('%type', array('%type' => $type->name)),
'#default_value' => variable_get($key, ''),
- '#description' => t('This pattern will be used for a users blog page (ie /blog/1)'),
+ '#description' => t('Pattern used as a fallback for all %type pages
(ie, when no other pattern is defined for that content type)', array('%type' => $type->name)),
) + $pattern_form_element;
- $form['patterns']['scope'][$key] = array('#type' => 'markup', '#value' => t('User'), );
- }
-
-
- // Add the forum root pattern field
- if (module_exists('forum')) {
- $form['patterns']['pattern']['page_title_forum_root_title'] = array(
- '#title' => t('Forum Root'),
- '#default_value' => variable_get('page_title_forum_root_title', ''),
- '#description' => t('This pattern will be used on the forum root page (ie, /forum)'),
- ) + $pattern_form_element;
- $form['patterns']['scope']['page_title_forum_root_title'] = array('#type' => 'markup', '#value' => t('Global'));
- }
-
+ $form['patterns']['content_type']['showfield'][$key .'_showfield'] = array(
+ '#default_value' => variable_get($key .'_showfield', 0),
+ ) + $showfield_form_element;
+
+ // We define patterns for all the languages available in Drupal
+ foreach ($langs as $langcode => $langname){
+ // Key language dependant variables : pattern
+ $lang_key = $key . '_' . $langcode;
+
+ // Content Type Entry for language : pattern
+ $form['patterns']['content_type']['pattern'][$lang_key] = array(
+ '#default_value' => variable_get($lang_key, ''),
+ ) + $pattern_form_element;
+
+ $form['patterns']['content_type']['language'][$lang_key] = array(
+ '#type' => 'markup',
+ '#value' => t('%lang', array('%lang' => $langname))
+ );
+ } // end foreach $langs
+ } // end foreach $types
+
+ // We want to sort the pattern of the arrays alphabetically
+ // @TODO We should use weight instead to sort out arrays
+ ksort($form['patterns']['general']['pattern']);
+ ksort($form['patterns']['specific']['pattern']);
// Add the token help to a collapsed fieldset at the end of the configuration page.
$form['token_help'] = array(
diff --git a/page_title.info b/page_title.info
index bdf9217..dd70989 100644
--- a/page_title.info
+++ b/page_title.info
@@ -3,9 +3,9 @@ name = Page Title
description = "Enhanced control over the page title (in the <head> tag)."
dependencies[] = token
core = 6.x
-; Information added by drupal.org packaging script on 2010-10-27
+; Information added by drupal.org packaging script on 2010-08-26
version = "6.x-2.x-dev"
core = "6.x"
project = "page_title"
-datestamp = "1288138448"
+datestamp = "1282781730"
diff --git a/page_title.module b/page_title.module
index 3a1ca2f..ad09f99 100644
--- a/page_title.module
+++ b/page_title.module
@@ -1,5 +1,5 @@
old_type;
+ $newkey_prefix = 'page_title_type_'. $info->type;
+
// Handle a content type rename
if ($op == 'update' && !empty($info->old_type) && $info->type != $info->old_type) {
- // Load the old node type settings.
- $temp = variable_get('page_title_type_'. $info->old_type, '');
-
- // If the settings aren't empty, then save them into the new type
- if (!empty($temp)) {
- variable_set('page_title_type_'. $info->type, $temp);
- }
-
- // Delete the old setting
- variable_del('page_title_type_'. $info->old_type);
-
- // Essentially, do the same as above but with the _showfield suffix for the node type
- $temp = variable_get('page_title_type_'. $info->old_type .'_showfield', 0);
+
+ // 1. Save showfield setting from old node type
+ $temp = variable_get($oldkey_prefix .'_showfield', 0);
if ($temp) {
- variable_set('page_title_type_'. $info->type .'_showfield', $temp);
+ variable_set($newkey_prefix .'_showfield', $temp);
}
- variable_del('page_title_type_'. $info->old_type .'_showfield');
-
+ variable_del($oldkey_prefix .'_showfield');
+
+ // 2. Save patterns of old node type for each languages available on the system
+ foreach ($langs as $langcode => $langname) {
+
+ // Key for the old and new node type per language
+ $oldkey_lang = $oldkey_prefix . '_' . $langcode;
+ $newkey_lang = $newkey_prefix . '_' . $langcode;
+
+ // Load the old node type setting
+ $temp = variable_get($oldkey_lang, '');
+
+ // If the setting is not empty, then save it with the new type
+ if (!empty($temp)) {
+ variable_set($newkey_lang, $temp);
+ }
+
+ // Delete the old setting
+ variable_del($oldkey_lang);
+
+ } // end foreach $alllangs
+
}
- // If deleted, remove the variables
+ // Handle a content type deletion
if ($op == 'delete') {
- variable_del('page_title_type_'. $info->type);
- variable_del('page_title_type_'. $info->type .'_showfield');
+
+ // Removing default pattern and showfield
+ variable_del($newkey_prefix);
+ variable_del($newkey_prefix .'_showfield');
+
+ // Removing patterns associated to a language
+ foreach ($langs as $langcode => $langname) {
+ $newkey_lang = $newkey_prefix . '_' . $langcode;
+ variable_del($newkey_lang);
+ }
+
}
}
@@ -145,15 +176,23 @@ function page_title_node_type($op, $info) {
* Implementation of hook_form_alter().
*/
function page_title_form_alter(&$form, $form_state, $form_id) {
+
// If we dont have permission to set the title then we need to abort this alter now!
if (!user_access('set page title')) return;
// Check we're editing a node and also check that the node type's 'show field' is enabled
if ($form['#id'] == 'node-form') {
- $key = 'page_title_type_'. $form['type']['#value'] .'_showfield';
- if (variable_get($key, 0)) {
- $page_title = isset($form['#node']->page_title) ? $form['#node']->page_title : NULL;
-
+
+ $showfield_key = 'page_title_type_'. $form['type']['#value'] .'_showfield';
+
+ if (variable_get($showfield_key, 0)) {
+
+ $default_pattern_key = 'page_title_type_'. $form['type']['#value'];
+ // If a language exists for this node, we use the language related page title pattern, else we use the default pattern
+ $pattern_key = empty($form['#node']->language) ? $default_pattern_key : $default_pattern_key . '_' . $form['#node']->language;
+
+ $page_title = isset($form['#node']->page_title) ? $form['#node']->page_title : variable_get($pattern_key, NULL);
+
// If we have vertical tabs installed, we need to render the form element slightly differently
$show_vertical_tabs = FALSE;
if (module_exists('vertical_tabs')) {
@@ -207,7 +246,6 @@ function page_title_form_alter(&$form, $form_state, $form_id) {
}
}
-
/**
* Implementation of hook_form_FORM_ID_alter().
*/
@@ -249,6 +287,25 @@ function page_title_form_forum_form_forum_alter(&$form, &$form_state) {
}
}
+/**
+ * Implementation of hook_form_FORM_ID_alter().
+ * Case when we're deleting a language, we need to remove variables from variable table
+ */
+function page_title_form_locale_languages_delete_form_alter(&$form, &$form_state) {
+ $form['#submit'][] = 'page_title_locale_languages_delete_form_submit';
+}
+
+/**
+ * Submit handler for the locale_languages_delete_form element added in the hook_form_alter() above.
+ * TODO there may be a cleaner way to do that
+ */
+function page_title_locale_languages_delete_form_submit($form, $form_state) {
+ // Remove all variables from variable table associated to the language deleted
+ // ie: begins with 'page_title_' and ends with '$lang'
+ $regexp = "^page_title_(.)*_" . $form['langcode']['#value'] . "{1}$";
+ $query = "DELETE FROM {variable} WHERE name REGEXP '%s'";
+ db_query($query, $regexp);
+}
/**
* Implementation of hook_form_FORM_ID_alter().
@@ -283,6 +340,10 @@ function page_title_form_user_profile_form_alter(&$form, &$form_state) {
* Implementation of hook_form_FORM_ID_alter().
*/
function page_title_form_node_type_form_alter(&$form, &$form_state) {
+
+ // key by content type
+ $key = 'page_title_type_'. $form['#node_type']->type;
+
// Alter the node type form - allows easy access to the per-content type page title settings
$form['page_title'] = array(
'#type' => 'fieldset',
@@ -299,13 +360,13 @@ function page_title_form_node_type_form_alter(&$form, &$form_state) {
'#options' => array(
'show_field' => t('Show field'),
),
- '#default_value' => variable_get('page_title_type_'. $form['#node_type']->type .'_showfield', 0) ? array('show_field') : array(),
+ '#default_value' => variable_get( $key .'_showfield', 0) ? array('show_field') : array(),
);
$form['page_title']['pattern'] = array(
'#type' => 'textfield',
'#title' => t('Page Title Pattern'),
- '#default_value' => variable_get('page_title_type_'. $form['#node_type']->type, ''),
+ '#default_value' => variable_get( $key , ''),
'#description' => t('Enter the Page Title pattern you want to use for this node type. For more information, please use the !link settings page', array('!link' => l('Page Title', 'admin/content/page_title'))),
);
@@ -317,9 +378,13 @@ function page_title_form_node_type_form_alter(&$form, &$form_state) {
* Submit handler for the node_type_form element added in the hook_form_alter() above.
*/
function page_title_node_type_form_submit($form, &$form_state) {
+
+ $key_type = 'page_title_type_'. $form_state['values']['type'];
+
$show_field = $form_state['values']['page_title']['show_field']['show_field'] ? 1 : 0;
- variable_set('page_title_type_'. $form_state['values']['type'] .'_showfield', $show_field);
- variable_set('page_title_type_'. $form_state['values']['type'], $form_state['values']['page_title']['pattern']);
+
+ variable_set($key_type .'_showfield', $show_field);
+ variable_set($key_type, $form_state['values']['page_title']['pattern']);
// For some reason the node module adds the fieldset as a separate entry in the variables table... we dont want this!
variable_del('page_title_'. $form_state['values']['type']);
@@ -441,7 +506,7 @@ function page_title_load_title($id, $type) {
/**
* Wrapper for old function...
- * NOTE: This has been depricated in favor of page_title_load_title().
+ * @deprecated Use page_title_load_title() instead.
*/
function page_title_node_get_title($nid) {
return page_title_load_title($nid, 'node');
@@ -450,7 +515,7 @@ function page_title_node_get_title($nid) {
/**
* Legacy page title setting function...
- * NOTE: This has been deprecated in favour of hook_page_title_alter().
+ * @deprecated Use hook_page_title_alter() instead.
*/
function page_title_set_title($title = NULL) {
static $stored_title;
@@ -499,9 +564,17 @@ function page_title_page_get_title($raw = FALSE) {
}
*/
- // If pattern is emtpy (either if the type is not overridable or simply not set) fallback to the default pattern)
- if (empty($page_title_pattern)) {
- $page_title_pattern = variable_get('page_title_default', '[page-title] | [site-name]');
+ // If pattern is empty (either if the type is not overridable or simply not set)
+ // 1) try to fallback to default content type pattern
+ // 2) else fallback to the default global pattern
+ if (empty($page_title_pattern) && $types['node']) {
+ // it's a node -> get the content type default pattern
+ $content_type_fallback_key = 'page_title_type_'.$types['node']->type;
+ $page_title_pattern = variable_get($content_type_fallback_key, '[page-title] | [site-name]');
+ }
+ if (empty($page_title_pattern)){
+ // it's not a node OR content type default pattern is not set -> fallback to default global pattern
+ $page_title_pattern = empty($page_title_pattern) ? variable_get('page_title_default', '[page-title] | [site-name]') : '';
}
// Append the pattern for pages with a pager on them
@@ -598,7 +671,6 @@ function _page_title_build_views_keys($view_name, $display_id) {
return 'page_title-'. implode('-', array_filter(array($view_name, $display_id)));
}
-
/**
* Form Alter handler for the views ui config form (used for filters and args)
*/
diff --git a/tests/page_title_views_test.info b/tests/page_title_views_test.info
index f9b6c28..186837b 100644
--- a/tests/page_title_views_test.info
+++ b/tests/page_title_views_test.info
@@ -5,9 +5,9 @@ package = Development
dependencies[] = page_title
dependencies[] = views
-; Information added by drupal.org packaging script on 2010-10-27
+; Information added by drupal.org packaging script on 2010-08-26
version = "6.x-2.x-dev"
core = "6.x"
project = "page_title"
-datestamp = "1288138448"
+datestamp = "1282781730"