匹配节点 ID 与 mysql table id

Matching node id with mysql table id

我必须创建可以从 url (example: localhost/site/node-1) 获取节点 ID 的函数,并将 link 设为 mysql 数据行,其中 (example: id=1) 我需要用几个节点动态地做它..我试试这个代码:

<?php

function module_name_menu() {
  $items['node-%'] = array(
    'title' => 'Row from database',
    'page callback' => 'module_name_node_page_view',
    'access callback' => 'node_access',
  );
  return $items;
}

function module_name_node_page_view(){

        $id = $_GET['id'];
        $results=db_query("SELECT * FROM csvupload WHERE id = $id");

        $header = array ( t('First name'), t('Last name'), t('Email'));
        $rows = array();

  foreach($results as $result){
    $rows[] = array(
      $result -> first_name,
      $result -> last_name,
      $result -> email,

      );
  }

  return theme('table', array('header' => $header, 'rows' => $rows));

}

当我转到 localhost/site/node-1 时,我发现找不到页面。我需要用 node-2, node-3 来做...有人可以帮我解决这个问题吗?

获取当前页面节点id有多种方式,即:

if (arg(0) == 'node') {
  $nid = arg(1);
}

if ($node = menu_get_object()) {
  $nid = $node->nid;
}

那么,你的格式:

localhost/site/node-1

不是 drupal 的 url 格式,而是为您定制的格式。为此,您可以先使用:

$_SERVER['REQUEST_URI']

获取您的自定义路径。然后,由于您的路径仅包含一个“-”符号,您可以使用 php explode() 函数按该符号拆分并从减号开始找到字符串部分。

http://php.net/manual/en/function.explode.php

此外,使用视图是从数据库中获取内容的 "more natural" ("drupalish") 方式,但是如果您的任务是特定的...您必须这样做。但是如果你必须加载一个节点,那你为什么要选择 "csvupload" table 呢? Drupal 的数据库组织比您预期的要复杂一些。并非您添加到内容类型的所有字段都是一个 table 的一部分。更重要的是,您添加的每个字段都是不同的 table 并且您将需要大量连接才能获得所需的内容。这就是为什么最好使用视图...