/** * Implementation of hook_load */ function term_description_load($field_name, $string = '') { // The user enters a comma-separated list of tags. We only autocomplete the last tag. // This regexp allows the following types of user input: // this, "somecmpany, llc", "and ""this"" w,o.rks", foo bar $content_type_info = _content_type_info(); $vid = $content_type_info['fields'][$field_name]['vid']; $tid = content_taxonomy_field_get_parent($content_type_info['fields'][$field_name]);
// If the menu system has splitted the search text because of slashes, glue it back. if (func_num_args() > 2) { $args = func_get_args(); $string .= '/'. implode('/', array_slice($args, 2)); }
// The user enters a comma-separated list of tags. We only autocomplete the last tag. $array = drupal_explode_tags($string);
// Fetch last tag $last_string = trim(array_pop($array)); $matches = array(); if ($last_string != '') { if ($tid) { $result = db_query_range(db_rewrite_sql("SELECT t.name FROM {term_data} t LEFT JOIN {term_synonym} s ON t.tid = s.tid INNER JOIN {term_hierarchy} h ON t.tid = h.tid WHERE h.parent = %d AND (LOWER(t.name) LIKE LOWER('%%%s%%') OR LOWER(s.name) LIKE LOWER('%%%s%%'))", 't', 'tid'), $tid,$last_string,$last_string,0,10); } else { $result = db_query_range(db_rewrite_sql("SELECT t.name FROM {term_data} t LEFT JOIN {term_synonym} s ON t.tid = s.tid WHERE t.vid = %d AND (LOWER(t.name) LIKE LOWER('%%%s%%') OR LOWER(s.name) LIKE LOWER('%%%s%%'))", 't', 'tid'), $vid, $last_string, $last_string, 0, 10); } $prefix = count($array) ? '"'. implode('", "', $array) .'", ' : '';
while ($tag = db_fetch_object($result)) { $n = $tag->name; // Commas and quotes in terms are special cases, so encode 'em. if (strpos($tag->name, ',') !== FALSE || strpos($tag->name, '"') !== FALSE) { $n = '"'. str_replace('"', '""', $tag->name) .'"'; } $matches[$prefix . $n] = check_plain($tag->name."BB"); } }
Посмотрите как это сделано в самом модуле, и сделайте так же. А лучше определите свой путь (term_description/autocomplete вместо content_taxonomy/autocomplete), и с помощью hook_form_alter подмените его в формочке модуля content_taxonomy.
Комментарии
Как отучиться ставить много вопросительных знаков?????????????77
Пишите модуль с hook_menu и переопределяйте путь к автокомпиту так, чтоб он ссылался на Вашу функцию.
)
Написал в своем модуле term_description поставил вес модуля -99. Все как в этом примере, но функция не переопределяется
<?php<?
/**
* Implementation of hook_menu
*/
function term_description_menu() {
$items['content_taxonomy/autocomplete'] = array(
'title' => 'Autocomplete',
'page callback' => 'term_description_load',
'access arguments' => array('access content'),
'type' => MENU_CALLBACK
);
return $items;
}
/**
* Implementation of hook_load
*/
function term_description_load($field_name, $string = '') {
// The user enters a comma-separated list of tags. We only autocomplete the last tag.
// This regexp allows the following types of user input:
// this, "somecmpany, llc", "and ""this"" w,o.rks", foo bar
$content_type_info = _content_type_info();
$vid = $content_type_info['fields'][$field_name]['vid'];
$tid = content_taxonomy_field_get_parent($content_type_info['fields'][$field_name]);
// If the menu system has splitted the search text because of slashes, glue it back.
if (func_num_args() > 2) {
$args = func_get_args();
$string .= '/'. implode('/', array_slice($args, 2));
}
// The user enters a comma-separated list of tags. We only autocomplete the last tag.
$array = drupal_explode_tags($string);
// Fetch last tag
$last_string = trim(array_pop($array));
$matches = array();
if ($last_string != '') {
if ($tid) {
$result = db_query_range(db_rewrite_sql("SELECT t.name FROM {term_data} t
LEFT JOIN {term_synonym} s ON t.tid = s.tid
INNER JOIN {term_hierarchy} h ON t.tid = h.tid
WHERE h.parent = %d
AND (LOWER(t.name) LIKE LOWER('%%%s%%') OR LOWER(s.name) LIKE LOWER('%%%s%%'))", 't', 'tid'),
$tid,$last_string,$last_string,0,10);
}
else {
$result = db_query_range(db_rewrite_sql("SELECT t.name FROM {term_data} t
LEFT JOIN {term_synonym} s ON t.tid = s.tid
WHERE t.vid = %d
AND (LOWER(t.name) LIKE LOWER('%%%s%%') OR LOWER(s.name) LIKE LOWER('%%%s%%'))", 't', 'tid'),
$vid, $last_string, $last_string, 0, 10);
}
$prefix = count($array) ? '"'. implode('", "', $array) .'", ' : '';
while ($tag = db_fetch_object($result)) {
$n = $tag->name;
// Commas and quotes in terms are special cases, so encode 'em.
if (strpos($tag->name, ',') !== FALSE || strpos($tag->name, '"') !== FALSE) {
$n = '"'. str_replace('"', '""', $tag->name) .'"';
}
$matches[$prefix . $n] = check_plain($tag->name."BB");
}
}
drupal_json($matches);
}
?>
Может я что-то не там переопределяю
Посмотрите как это сделано в самом модуле, и сделайте так же. А лучше определите свой путь (term_description/autocomplete вместо content_taxonomy/autocomplete), и с помощью hook_form_alter подмените его в формочке модуля content_taxonomy.
riyuzakki Спасибо
--