匹配节点id与mysql表id

时间:2017-05-14 18:12:48

标签: php mysql drupal drupal-7

我必须创建函数,我可以从url(example: localhost/site/node-1)获取节点ID并链接到mysql databes row (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时,我找不到Page。我需要用node-2, node-3来做...有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

有几种方法可以获取当前页面节点ID,即:

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

或者

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

然后,你的格式:

本地主机/站点/节点-1

不是drupal的网址格式,而是为您定制的内容。为此你可以先使用:

$_SERVER['REQUEST_URI']

获取自定义路径。然后,因为你的路径只包含一个&#34; - &#34;标志你可以使用php explode()函数来拆分该符号并从减号中找到字符串部分。

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

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