first import :: search autocomplete form
Signed-off-by: bachy <git@g-u-i.net>
This commit is contained in:
commit
ad7809415c
27
materiobasemod.info
Normal file
27
materiobasemod.info
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
name = materiobasemod
|
||||||
|
description = "Materio base module"
|
||||||
|
|
||||||
|
; Core version (required)
|
||||||
|
core = 7.x
|
||||||
|
|
||||||
|
; Package name (see http://drupal.org/node/542202 for a list of names)
|
||||||
|
package = Materio
|
||||||
|
|
||||||
|
; PHP version requirement (optional)
|
||||||
|
; php = 5.2
|
||||||
|
|
||||||
|
; Loadable code files
|
||||||
|
;files[] = materiobasemod.theme.inc
|
||||||
|
;files[] = materiobasemod.forms.inc
|
||||||
|
files[] = materiobasemod.pages.inc
|
||||||
|
files[] = materiobasemod.module
|
||||||
|
|
||||||
|
; Module dependencies
|
||||||
|
dependencies[] = taxonomy
|
||||||
|
|
||||||
|
; Configuration page
|
||||||
|
; configure = admin/config/materiobasemod
|
||||||
|
|
||||||
|
|
||||||
|
; For further information about configuration options, see
|
||||||
|
; - http://drupal.org/node/542202
|
118
materiobasemod.module
Normal file
118
materiobasemod.module
Normal file
@ -0,0 +1,118 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* @file
|
||||||
|
* This is the file description for Materiobasemod module.
|
||||||
|
*
|
||||||
|
* In this more verbose, multi-line description, you can specify what this
|
||||||
|
* file does exactly. Make sure to wrap your documentation in column 78 so
|
||||||
|
* that the file can be displayed nicely in default-sized consoles.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Implements hook_permission().
|
||||||
|
*/
|
||||||
|
function materiobasemod_permission() {
|
||||||
|
return array(
|
||||||
|
'use materiobase search' => array(
|
||||||
|
'title' => t('Materio base search'),
|
||||||
|
'description' => t('Use materiobasemod search.'),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Implements hook_menu().
|
||||||
|
*/
|
||||||
|
function materiobasemod_menu() {
|
||||||
|
$items = array();
|
||||||
|
$items['materiobase/search/autocomplete'] = array(
|
||||||
|
'title' => 'Autocomplete materiobase search',
|
||||||
|
'page callback' => 'materiobase_search_autocomplete',
|
||||||
|
'access arguments' => array('access content'),
|
||||||
|
'type' => MENU_CALLBACK,
|
||||||
|
'file' => 'materiobasemod.pages.inc',
|
||||||
|
);
|
||||||
|
return $items;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Implements hook_block_info().
|
||||||
|
*/
|
||||||
|
function materiobasemod_block_info() {
|
||||||
|
// This example comes from node.module.
|
||||||
|
$blocks['base_search'] = array(
|
||||||
|
'info' => t('Materio base search'),
|
||||||
|
'cache' => DRUPAL_NO_CACHE
|
||||||
|
);
|
||||||
|
|
||||||
|
return $blocks;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Implements hook_theme().
|
||||||
|
*/
|
||||||
|
function materiobasemod_theme($existing, $type, $theme, $path) {
|
||||||
|
return array(
|
||||||
|
'materiobase_search_block' => array(
|
||||||
|
'arguments' => array(),
|
||||||
|
'template' => 'materiobase-search-block',
|
||||||
|
'path' => drupal_get_path('module', 'materiobasemod').'/templates',
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Implements hook_block_view().
|
||||||
|
*/
|
||||||
|
function materiobasemod_block_view($delta = '') {
|
||||||
|
// This example comes from node.module. Note that you can also return a
|
||||||
|
// renderable array rather than rendered HTML for 'content'.
|
||||||
|
$block = array();
|
||||||
|
|
||||||
|
switch ($delta) {
|
||||||
|
case 'base_search':
|
||||||
|
if (user_access('use materiobase search')) {
|
||||||
|
$block['subject'] = t('Search');
|
||||||
|
$block['content'] = theme('materiobase_search_block', array());
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return $block;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* materiobase_search_form()
|
||||||
|
*/
|
||||||
|
function materiobase_search_form(){
|
||||||
|
|
||||||
|
$form = array();
|
||||||
|
|
||||||
|
$form['searchfield'] = array(
|
||||||
|
'#type' => 'textfield',
|
||||||
|
'#default_value' => '',
|
||||||
|
'#autocomplete_path' => 'materiobase/search/autocomplete',
|
||||||
|
'#size' => 30,
|
||||||
|
'#maxlength' => 1024,
|
||||||
|
// '#element_validate' => array('taxonomy_autocomplete_validate'),
|
||||||
|
);
|
||||||
|
|
||||||
|
$form['create'] = array(
|
||||||
|
'#type' => 'submit',
|
||||||
|
'#value' => t('Search'),
|
||||||
|
);
|
||||||
|
|
||||||
|
return $form;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* template_preprocess_materiobase_search_block();
|
||||||
|
*/
|
||||||
|
function template_preprocess_materiobase_search_block(&$vars){
|
||||||
|
|
||||||
|
$vars['searchform'] = drupal_get_form("materiobase_search_form");
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
54
materiobasemod.pages.inc
Normal file
54
materiobasemod.pages.inc
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* materiobase_search_autocomplete()
|
||||||
|
*
|
||||||
|
* inspired by taxonomy_autocomplete()
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
function materiobase_search_autocomplete($typed = ''){
|
||||||
|
// If the request has a '/' in the search text, then the menu system will have
|
||||||
|
// split it into multiple arguments, recover the intended $tags_typed.
|
||||||
|
$args = func_get_args();
|
||||||
|
$typed = implode('/', $args);
|
||||||
|
|
||||||
|
/*
|
||||||
|
TODO riche serach engine + \\ etc gmail like
|
||||||
|
*/
|
||||||
|
|
||||||
|
if ($typed != '') {
|
||||||
|
|
||||||
|
// Part of the criteria for the query come from the field's own settings.
|
||||||
|
$vids = array();
|
||||||
|
$vocabularies = taxonomy_vocabulary_get_names();
|
||||||
|
foreach ($vocabularies as $voc) {
|
||||||
|
$vids[] = $voc->vid;
|
||||||
|
}
|
||||||
|
|
||||||
|
$query = db_select('taxonomy_term_data', 't');
|
||||||
|
$query->addTag('translatable');
|
||||||
|
$query->addTag('term_access');
|
||||||
|
|
||||||
|
// Select rows that match by term name.
|
||||||
|
$tags_return = $query
|
||||||
|
->fields('t', array('tid', 'name'))
|
||||||
|
->condition('t.vid', $vids)
|
||||||
|
->condition('t.name', '%' . db_like($typed) . '%', 'LIKE')
|
||||||
|
->range(0, 10)
|
||||||
|
->execute()
|
||||||
|
->fetchAllKeyed();
|
||||||
|
|
||||||
|
$term_matches = array();
|
||||||
|
foreach ($tags_return as $tid => $name) {
|
||||||
|
$n = $name;
|
||||||
|
// Term names containing commas or quotes must be wrapped in quotes.
|
||||||
|
// if (strpos($name, ',') !== FALSE || strpos($name, '"') !== FALSE) {
|
||||||
|
// $n = '"' . str_replace('"', '""', $name) . '"';
|
||||||
|
// }
|
||||||
|
$term_matches[$n] = check_plain($name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
drupal_json_output($term_matches);
|
||||||
|
|
||||||
|
}
|
3
templates/materiobase-search-block.tpl.php
Normal file
3
templates/materiobase-search-block.tpl.php
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
<?php
|
||||||
|
print "hello world !";
|
||||||
|
print render($searchform);
|
Loading…
x
Reference in New Issue
Block a user