Как искать в Twitter с помощью модуля Drupal и Juitter, НО с помощью окна поиска на главной странице - PullRequest
2 голосов
/ 01 ноября 2009

Я использую Drupal 6.x, я успешно установил

Juitter http://drupal.org/project/juitter

, который делает именно то, что нужно моим пользователям, это поиск в Twitter.

Но для этого им нужно перейти на определенную страницу, где вызывается модуль Juitter, которая выглядит примерно так:

____ example.com/juitter

и затем им нужно набрать запрос и нажать кнопку поиска, чтобы получить прекрасную страницу результатов поиска в реальном времени с помощью AJAX.

Что, если я хочу простое текстовое поле на другой странице, скажем, страница HOME: _____example.com/

откуда пользователь может ввести свой запрос в поле ввода «Поиск в Твиттере» и перейти к чему-то вроде

____ example.com/juitter/searched-query-here

и соответствующая страница Juitter с результатами?

Если у вас есть лучший подход, чем этот, будьте любезны посоветовать мне?

Большое спасибо.

Вопрос

Ответы [ 2 ]

3 голосов
/ 02 ноября 2009

Интересный модуль / функциональность - и очевидная отсутствующая функция;)

Я немного поиграл с ним в локальном тестовом экземпляре и смог получить рабочий результат, используя следующий подход:

  1. Добавьте функциональность, чтобы предварительно заполнить поле поиска на странице 'juitter' поисковыми терминами из URL, если таковые имеются. В функции modules juitter_page() (в 'juitter.module') замените эту строку (137):

    $search_phrase = t(variable_get('juitter_search_text', 'Search twitter:'));
    

    с этим кодом:

    $preset = func_get_args();
    if (!empty($preset)) {
      $search_phrase = implode(' ', $preset);
    }
    else {
      $search_phrase = t(variable_get('juitter_search_text', 'Search twitter:'));
    }
    

    С этим изменением вызов 'juitter / foo' вызовет стандартную страницу juitter, но с 'foo' в поле поиска вместо текста поиска по умолчанию. Вызов 'juitter / foo / bar' приведет к появлению 'foo bar' в окне поиска, в то время как вызов одного только 'juitter' будет вести себя как и раньше.

  2. Настройте javascript для автоматической отправки поиска, если он был предварительно заполнен изменением выше. В файле модулей juitter.js удалите следующую строку (22):

    juitter.get_tweets($('#juitterTabsWrapper a:first').attr('id'));
    

    и добавьте этот код в конец функции Drupal.behaviors.Juitter (под «комментарием к окну поиска» - /* /Search box */, строка 53) вместо:

    /* Trigger default. Use search term, if not default, otherwise use first tab */
    if (juitter.search && $(".juitterSearch").val()!=Drupal.t(juitter.search.text)) {
      $("#juitterSearch").submit();
    }
    else {
      juitter.get_tweets($('#juitterTabsWrapper a:first').attr('id'));
    }
    

    Это будет проверять, был ли заменен текст в окне поиска по умолчанию - если да, он отправит поиск, в противном случае он будет вести себя как прежде и будет искать в соответствии с конфигурацией вкладок по умолчанию.

  3. После внесения этих изменений все, что нужно, - это поисковая форма, похожая на поисковый блок Drupals, перенаправляющая на URL-адрес устройства, где поисковые термины превращаются в элементы пути. Добавьте следующее в конец файла juitter.module:

    /**
     * Implementation of hook_block().
     */
    function juitter_block($op = 'list', $delta = 0) {
      if ($op == 'list') {
        $blocks[0]['info'] = t('Juitter search form');
        // Not worth caching.
        $blocks[0]['cache'] = BLOCK_NO_CACHE;
        return $blocks;
      }
      else if ($op == 'view' && user_access('access content')) {
        $block['content'] = drupal_get_form('juitter_search_block_form');
        $block['subject'] = t('Search Twitter');
        return $block;
      }
    }
    
    /**
     * Callback function to generate the juitter search form
     *
     */
    function juitter_search_block_form($form_state) {
      $form['search_terms'] = array(
        '#title' => t('Search Twitter'),
        '#type' => 'textfield',
        '#size' => 15,
        '#default_value' => '',
        '#attributes' => array('title' => t('Enter the terms you wish to search for.')),
      );
      $form['submit'] = array('#type' => 'submit', '#value' => t('Search'));
      $form['#submit'][] = 'juitter_search_block_form_submit';
    
      return $form;
    }
    
    /**
     * Process a juitter search form submission.
     */
    function juitter_search_block_form_submit($form, &$form_state) {
      // The search form relies on control of the redirect destination for its
      // functionality, so we override any static destination set in the request,
      // for example by drupal_access_denied() or drupal_not_found()
      // (see http://drupal.org/node/292565).
      if (isset($_REQUEST['destination'])) {
        unset($_REQUEST['destination']);
      }
      if (isset($_REQUEST['edit']['destination'])) {
        unset($_REQUEST['edit']['destination']);
      }
    
      $form_id = $form['form_id']['#value'];
      $form_state['redirect'] = 'juitter/'. trim($form_state['values']['search_terms']);
    }
    

    Это создаст блок 'Форма поиска Juitter', который вы можете разместить по своему усмотрению.

Вот и все;)

ПРИМЕЧАНИЕ: Обычно я бы реализовывал подобные изменения «извне», создав отдельный модуль, но, поскольку это уже запрос функции самого модуля , я редактировал код модуля напрямую. Я постараюсь свернуть это в патч и отправить его туда. Патч доступен здесь , благодаря theunraveler .

Кстати, я бы не стал кодировать полные решения, подобные этому, для ответа - просто этот модуль меня заинтересовал. Так как вы, кажется, новый пользователь здесь на SO, не ожидайте, что это как норма;)


Edit: в этом подходе есть небольшой недостаток, так как модуль также регистрирует путь 'juitter / ahah' для обратного вызова javascript, используемого в форме администрирования. Поэтому, если пользователь введет «ахах» в новое поле поиска, он получит в результате бесполезный элемент формы, закодированный в json. Очевидным решением этого было бы изменить путь обратного вызова ahah на что-то другое. В качестве обходного пути вы могли бы добавить механизм экранирования при перенаправлении из формы, отменяя экранирование при помещении текста в главное окно поиска.

2 голосов
/ 02 ноября 2009

Я свернул решение Хенрика в патч, доступно здесь .

...