Как связать пользовательские результаты в Drupal - PullRequest
0 голосов
/ 20 февраля 2011

Мой первый раз здесь новичок в Drupal и программировании.

Итак, у меня есть проблема, с которой мне нужна помощь.

    function query_results($searchstring, $datefrom) {
    $tidresult = db_query("SELECT tid FROM {term_data} WHERE LOWER(name) = '%s'", strtolower($searchstring));

    $resultarray = array();
    while ($obj = db_fetch_object($tidresult)) {
        $tid = $obj->tid;

        $noderesults = db_query("SELECT n.nid, n.title FROM {node} n
                                                        INNER JOIN {term_node} tn ON tn.nid = n.nid
                                                            WHERE tn.tid='%s'", $tid);
        while ($nodeobj = db_fetch_object($noderesults)) {
            $resultarray[$nodeobj->nid] = $nodeobj->title;
        }
    }


        $header = array(
        array('data' => 'Nr.'),
        array('data' => 'Name'),
    );

$rows = array();
    $i = 0;

    foreach($resultarray as $nid => $title) {
        $i++;
        $rows[] = array('data' =>
          array(
                $i,
                $title,
            ),
        );

    }


    $output = theme('table', $header, $rows);
    print theme("page", $output);
}

Это сводит меня с ума, я не помещаю весь код поиска, но он берет теги таксономии из базы данных (вы вводите текстовое поле с автозаполнением, '$ searchstring') и дату (вы выбираетевременная шкала, например, один день, вчерашний и т. д., '$ datefrom').

Например, например, допустим, что при выборе поиска, например, пример .

Iя не могу опубликовать свои одни изображения, но я просто даю мне названия (как и выше, но их нет в списке), которые я не могу щелкнуть, чтобы привести меня к содержанию.

Но я не хочу, чтобы это выглядело как результат, которыйнапример, содержание (история), поэтому у вас есть кликабельный заголовок и некоторое описание, например щелкните, чтобы увидеть пример , где написано lorem ipsum и текст ниже.

Если трудно сделать так, как на картинке, может кто-нибудь показать мне, как сделать (как на первом изображении) результаты, которые не являются кликабельными заголовками в кликабельные ссылки, которые ведут меня к содержанию.

1 Ответ

1 голос
/ 24 февраля 2011

Чтобы получить связанные заголовки, вам нужно использовать функцию l().

глядя на код, который вы указали, я не совсем уверен, как вы получаете какие-либо результаты, поскольку вы сохраняете заголовки в $resultArray, но используете $rows при рендеринге таблицы.

Если $ строк не указано где-то еще, $resultarray[$nodeobj->nid] = $nodeobj->title; должно стать $rows[$nodeobj->nid] = $nodeobj->title; Чтобы он совпадал с заголовком таблицы, вам нужно добавить еще одну «ячейку» для столбца чисел

$rows[$nodeobj->nid] = array(
  $count++,
  l($nodeobj->title, 'node/'.$nodeobj->nid)
);

Чтобы предоставить отрывок, вам необходимо присоединиться к таблице node_revisions и получить столбец body или teaser, а затем добавить его в свои строки следующим образом:

$rows[$nodeobj->nid] = array(
  $count++,
  '<h2>'. l($nodeobj->title, 'node/'.$nodeobj->nid) .'</h2>'. $nodeobj->teaser
);

при условии, что вы получите тизер.

EDIT предыдущий ответ остается в силе. Вы также можете немного упростить код, обрабатывая $ строки прямо в цикле $ noderesults.

функция query_results ($ searchstring, $ datefrom) { $ tidresult = db_query ("SELECT tid FROM {term_data} WHERE LOWER (name) = '% s'", strtolower ($ searchstring));

    $rows   = array();
    $count  = 0;

    while ($obj = db_fetch_object($tidresult)) {
      $tid = $obj->tid;

      $noderesults = db_query("SELECT n.nid, n.title FROM {node} n "
                             ."INNER JOIN {term_node} tn ON tn.nid = n.nid "
                             ."WHERE tn.tid='%s'", $tid);

      while ($nodeobj = db_fetch_object($noderesults)) {
        $rows[] = array(
          ++$count,
          l($nodeobj->title, 'node/'. $nodeobj->title)
        );
      }
    }

    $header = array(
      array('data' => 'Nr.'),
      array('data' => 'Name'),
    );


    $output = theme('table', $header, $rows);
    print theme("page", $output);
}

1025 * -ИЛИ- *

переместить все в одном запросе (примечание: у меня не было возможности проверить это, но я обычно делаю это правильно с первого раза):

function query_results($searchstring, $datefrom) {

  $rows   = array();
  $count  = 0;

  $results = db_query("SELECT n.nid, n.title 
                       FROM {node} n 
                       INNER JOIN {term_node} tn ON tn.nid = n.nid 
                       WHERE tn.tid IN (SELECT tid FROM {term_data} WHERE LOWER(name) = '%s')", strtolower($searchstring));


  while ($nodeobj = db_fetch_object($results)) {
    $rows[] = array(
      ++$count,
      l($nodeobj->title, 'node/'. $nodeobj->title)
    );
  }

  $header = array(
    array('data' => 'Nr.'),
    array('data' => 'Name'),
  );


  $output = theme('table', $header, $rows);
  print theme("page", $output);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...