在Drupal中定义内容类型时

时间:2012-04-10 11:08:47

标签: drupal drupal-7 drupal-modules

目前我有一个可以上传文件,提取文件,读取一些文件并将其存储在数据库中的模块。由于我只是一名PHP开发人员,而不是Drupal开发人员,因此我对内容类型,视图和其他Drupal的内容并不常见。我只是想从数据库中显示一些东西到多个页面并编辑一些东西(不是所有东西)。

在PHP中进行操作就像在信封中放一个简单一样简单,但在Drupal中,就好像你正在把轮椅放在那个信封里。

我是否必须为其定义内容类型?

如果我不使用内容类型并手动控制权限,这是否容易?

假设我必须定义内容类型。我的数据库有5个表。我应该定义5种不同的内容类型吗?

2 个答案:

答案 0 :(得分:2)

如果您需要一些Drupal的东西来处理您的数据,您不必以Drupal方式执行此操作。我也开发了一个模块。它访问数据库,显示数据,然后授权用户可以更新数据,我的模块将保存它。但这些不是节点。除非您需要(例如)在节点上运行的某些钩子在您的内容上运行,否则只需使用您的PHP知识为该页面创建内容。

使用hook_menu定义将显示页面的路径。例如,在我的代码(detail_pages模块)中,查询在路径中获取两个参数,例如example.com/strain/3/4,我将其定义如下,并且我在detail_page中使用了对数据库的php调用($ arg1,$ arg2)函数定义。

function detail_pages_menu() {
  $items = array();
  $items['strain/%/%'] = array(
      'title' => t('Strain Detail Page'),
      //'page callback' => 'strain_form',
      'page callback' => 'detail_page',//'drupal_get_form',
      //'page arguments' => array('strain_detail_form'),
      'page arguments' => array(1,2),
      'access callback' => TRUE,
      'access arguments' => array('access content'),
      'description' => t('Detail Page'),
      'type' => MENU_NORMAL_ITEM,
  );
....

回答您的具体问题

  

我是否必须为其定义内容类型?

没有。您可以使用页面渲染数组,甚至可以将直接html添加到PHP中的页面。

  

如果我不使用内容类型并手动控制权限,这是否容易?

是。在我写的上面的例子中,这一行是为了权限: 'access callback'=>真正 这允许每个人查看。您可以指定一个函数来代替TRUE,以返回一个布尔值来表示用户是否有权查看该页面。

  

假设我必须定义内容类型。我的数据库有5个表。我应该定义5种不同的内容类型吗?

特别是如果您需要一个不错的数据库结构,您可能希望避免使用节点和定义内容类型。 Drupal创建一个表,用于按节点ID逻辑键入的列。所以你有很多不必要的表......

答案 1 :(得分:0)

有很多方法可以达到你想要的效果。 根据你的描述,我认为你想在某些页面上显示一些信息(不要真的知道“编辑某些东西”的意思)。

  1. 你可以有一个块(=多个页面上定义的区域) 在Drupal中,您可以使用规则或PHP来控制块出现的页面(例如,在内容类型“Page”上)。
  2. 具有自定义节点结构的内容类型 类似于page.tpl.php和node.tpl.php(可能会混淆扩展,这里已经有一段时间了)定义主题所包含的某些部分的结构,你可以让你的内容类型节点显示你想要的任何信息使用PHP,HTML和CSS。 (就像该内容类型的所有对象的包装器一样)
  3. 面板 面板用于拆分页面。您的菜单项可以指向单个面板,例如,页面的上半部分是静态“页面”(=该内容类型的节点),下半部分是另一个“页面”,其中包含用于显示信息的PHP代码。
  4. 在所有三个选项中,您可以显示个性化数据,这意味着您拥有全局变量,告诉您用户ID,名称,角色等,以便从数据库加载特定数据并相应地显示它。

    结论:内容类型使一切变得更容易组织,但如果您只有一个该类型/结构的实例(=节点),则可以将代码放在“页面”中。

    随时询问更多详情。