'select', '#title' => t('Skip some meta tag values'), '#options' => array( 0 => t("All meta tags given a value"), 2 => t('Every 2nd value'), 3 => t('Every 3rd value'), 4 => t('Every 4th value'), 5 => t('Every 5th value'), ), '#default' => 0, '#description' => t('Control whether all of the meta tags will be given values, or .'), ); // Move the submit button to after the rest of the fields. $form['submit']['#weight'] = 100; } /** * Implements hook_node_insert(). * * Integrate with Devel Generate. */ function metatag_devel_node_insert($node) { // Check to see if the node is generated by Devel Generate. if (isset($node->devel_generate)) { $metatags = array(); // Max length of words. $title_length = $node->devel_generate['title_length']; // Pregenerate the URL. $url = url('', array('absolute' => TRUE)); // Types of images. $image_types = array('jpg' => 'jpg', 'png' => 'png', 'gif' => 'gif'); // Optionally skip some meta tags. $skip = $node->devel_generate['metatag_skip']; // Generate some meta tags. $count = 0; foreach (metatag_get_info('tags') as $tag => $tag_info) { // Optionally skip records. if (empty($skip) || $count == 0 || (($count % $skip) == 0)) { // Default to ten words per tag. $maxlength = 10; // By default, just assume a simple text value. $type = 'text'; if (strpos($tag, 'title') !== FALSE) { $maxlength = $title_length; } // Allow tags to customize the generation settings. if (!empty($tag_info['devel_generate'])) { if (!empty($tag_info['devel_generate']['type'])) { $type = $tag_info['devel_generate']['type']; } if (!empty($tag_info['devel_generate']['maxlength'])) { $maxlength = $tag_info['devel_generate']['maxlength']; } } // Work out how to handle possibly more complicated meta tags. elseif (isset($tag_info['form']) && is_array($tag_info['form'])) { // Textarea fields can be longer than other tags. if (isset($tag_info['form']['#type']) && $tag_info['form']['#type'] == 'textarea') { $maxlength = 20; } // Anything with an '#options' value will have one item picked at // random. elseif (isset($tag_info['form']['#options'])) { $type = 'select'; } } // Simple values. if ($type == 'text') { $metatags[$tag]['value'] = devel_create_greeking($maxlength, TRUE); } // Select lists, pick a value at random. elseif ($type == 'select') { // Nested arrays, aka opgroups - collapse it down to one level. if (is_array($tag_info['form']['#options'])) { $options = array(); foreach ($tag_info['form']['#options'] as $option => $subopts) { if (is_array($subopts)) { $options += array_keys($subopts); } else { $options[] = $option; } } } else { $options = $tag_info['form']['#options']; } $metatags[$tag]['value'] = array_rand(drupal_map_assoc($options)); // Support checkboxes, which require the default value be an array. if ($tag_info['class'] == 'DrupalListMetaTag') { $metatags[$tag]['value'] = array($metatags[$tag]['value']); } } // URL values. elseif ($type == 'url') { $metatags[$tag]['value'] = $url . strtolower(str_replace(' ', '/', devel_create_greeking($maxlength, TRUE))); } // Image URL values. elseif ($type == 'image') { $filepath = strtolower(str_replace(' ', '/', devel_create_greeking($maxlength, TRUE))); $ext = array_rand($image_types); $metatags[$tag]['value'] = $url . $filepath . '.' . $ext; } // Integers, generate an integer between 0 and 999. elseif ($type == 'integer') { $metatags[$tag]['value'] = rand(0, 999); } // Floats, generate an integer between 0 and 999. elseif ($type == 'float') { $metatags[$tag]['value'] = rand(0, 999) . '.' . rand(0, 999); } // Phone numbers will be given the US format of XXX-XXX-XXXX. elseif ($type == 'phone') { $metatags[$tag]['value'] = rand(100, 999) . '-' . rand(100, 999) . '-' . rand(1000, 9999); } // Email addresses. elseif ($type == 'email') { $metatags[$tag]['value'] = strtolower(devel_create_greeking(1, TRUE) . '@' . devel_create_greeking(1, TRUE) . '.com'); } // Canonical URL values - just fill in the absolute URL for the current // page. elseif ($type == 'canonical') { $metatags[$tag]['value'] = '[current-page:url:absolute]'; } // Twitter usernames. elseif ($type == 'twitter') { $metatags[$tag]['value'] = '@' . devel_create_greeking(1, TRUE); } // Replace spaces in keyword fields with commas. if (strpos($tag, 'keyword') !== FALSE) { $metatags[$tag]['value'] = str_replace(' ', ',', $metatags[$tag]['value']); } } // Bump the counter. $count++; } // Adjust the values for the nested language structure. $metatags = array( $node->language => $metatags, ); // Save the meta tags. metatag_metatags_save('node', $node->nid, $node->vid, $metatags); } }