用于自定义内容的存档页面 -- 7 领域 和 blocks 领域 和 hooks 领域 drupal 相关 的问题

Archive page for custom content


0
vote

问题

中文

我想为自定义内容类型创建一个存档页面。基本上在单个页面上列出它们。

我了解我需要创建一个模块,并实现 hook_block_info() hook_block_view() 。我不知道如何做是为了检索内容,所以我可以循环它。在Wordpress中,有 query_posts($post_type = mycustomcontenttype) 。 Drupal 7中是否存在相同的?

我不想为此使用视图模块。

英文原文

I want to create an archive page for a custom content type. Essentially list them all on a single page.

I understand that I need to create a module, and implement hook_block_info() and hook_block_view(). What I don't know how to do is to retrieve content so I can loop it out. In wordpress there is query_posts($post_type = mycustomcontenttype). Is there an equivalent in Drupal 7?

I do not want to use the Views module for this.

        
     
     

回答列表

1
 
vote
vote
最佳答案
 

如果您正在寻找$节点对象,并且不怕自己格式化信息, node_load_multiple()最接近解决您的问题。 $条件参数应该已弃用,但您可以使用它来指定内容类型。如果要以API页面推荐的方式使用Node_load_Multiple(),我相信您只需使用一个简单的db_query()来检索带有给定类型的所有内容的节点ID(nids):

  $nids = db_query('SELECT nid FROM {node} WHERE type = my_content_type');   
然后,您可以迭代结果以创建一个nids数组来传递给node_load_multiple()。
  $nid_array = array(); foreach($nids as $nid){   $nid_array[] = $nid; } node_load_multiple($nid_array);   

从那里,您将必须迭代$返回的$ node对象以创建存档页面。根据您是使用路径别名,您可能必须检索每个节点的别名。

  drupal_lookup_path('alias',"node/".$node->nid);   

所有所说的,我会在心跳中的视图中做到这一点。

 

If you're looking to retrieve $node objects and aren't afraid of formatting the info yourself, node_load_multiple() probably comes closest to solving your problem. The $conditions parameter is supposed to be deprecated, but you could use it to specify content type. If you want to use node_load_multiple() in the manner recommended by the API page, I believe you would just use a simple db_query() to retrieve the node ids (nids) of all content with a given type:

$nids = db_query('SELECT nid FROM {node} WHERE type = my_content_type'); 

Then you could iterate through the results to create an array of nids to pass to node_load_multiple().

$nid_array = array(); foreach($nids as $nid){   $nid_array[] = $nid; } node_load_multiple($nid_array); 

From there you're going to have to iterate through the $node objects returned to create your archive page. Depending on whether you're using path aliases, you might have to retrieve the alias for each node.

drupal_lookup_path('alias',"node/".$node->nid); 

All that said, I would do this in Views in a heartbeat.

 
 
   
   
0
 
vote

对于此类查询,存在 entityfieldquery < / a>类,使用代码类似于以下内容:

  $query = new EntityFieldQuery(); $entities = $query->entityCondition('entity_type', 'node')   ->entityCondition('bundle', 'mycustomcontenttype')   ->propertyCondition('status', 1)   ->execute();  $nodes = entity_load('node', array_keys($entities['node'])); return node_view_multiple($nodes, 'teaser');   

而不是 entity_load() 你可以使用 node_load_multiple() 传递到传递给 entity_load() 的第二个参数。

在向用户显示节点列表时,始终过滤基于其"状态" 字段的节点,除非用户有权查看未发布节点;在任何情况下,您应该检查用户是否具有该许可。
由于第三方模块可能会限制将节点查看到特定用户的权限,而不是根据"状态" 字段的值,您应该使用 node_access('查看')要验证用户是否有权查看节点,以前可视化它。

 

For such queries, there is the EntityFieldQuery class, and the code to use is similar to the following one:

$query = new EntityFieldQuery(); $entities = $query->entityCondition('entity_type', 'node')   ->entityCondition('bundle', 'mycustomcontenttype')   ->propertyCondition('status', 1)   ->execute();  $nodes = entity_load('node', array_keys($entities['node'])); return node_view_multiple($nodes, 'teaser'); 

Instead of entity_load() you can use node_load_multiple() passing the second argument passed to entity_load().

When showing a list of nodes to user, always filter the nodes basing on their "status" field, except in the case the user has the permission of viewing unpublished nodes; in any case, you should check if the user has that permission.
As third-party modules could restrict the permission to view a node to specific users, instead of depending from the value of the "status" field, you should use node_access('view') to verify the user has the permission to see the node, before to visualizing it.

 
 

相关问题

0  内容管理屏幕上的各种“未定义”通知  ( Various undefined notices on content admin screen ) 
我在内容admin屏幕上偶尔地旋转。这些似乎是引用我在模板中的字段,这对这些实际屏幕来说都是很好的。我只是没有得到为什么这个内容管理屏幕正在寻找这些值。 以下是错误消息: • Notice: Undefined property: stdClass::$field_pcast_fname in include...

0  如何在页面标题中添加内容类型令牌?  ( How do i add the content type token in the page title ) 
我已安装页面标题模块。我想要实现的是将内容类型令牌添加为页面标题。我试图在页面标题模块的配置中更改模式,但令牌显示为:"[当前 - 页:页面:页面标题],[field_glossary_transliterations] - [field_glossary_meaning] | [站点:name]。" < / p...

2  Drupal是否已经是照片,即使它已经是正确的图像样式,也是正确的尺寸?  ( Does drupal resave the photo even if its already the correct size as your image ) 
drupal仍会重新按压照片,即使您上传的文件是已经与所选图像样式相同的大小?如果它确实会重新按压,有没有办法阻止它?在这种情况下,图像质量是股份,因为它将其保存在JPG中。 ...

2  魔术引号是否应该打开/关闭Drupal 7?  ( Should magic quotes be on off for drupal 7 ) 
应该打开或关闭魔术引号? ...

0  如何在清单页面中包含表单?  ( How to include a form in a listing page ) 
我正在显示内容信息页面。在内容显示页面的末尾,我需要显示一个表单。 我该怎么做? 我做了什么? 在 hook_menu() 中写入菜单回调 编写了一种收集信息的方法 在 hook_theme() 中注册了主题 写入hook_preprocess_theme()注册变量 创建了一个模板并分配变量 通过完成上...

8  将您自己的内容添加到节点  ( Add your own content to node ) 
我创建了一个模块,将自定义内容添加到节点;我想在节点视图中显示此自定义内容。我认为 hook_node_view() 是右挂钩要使用,但我的内容没有显示。 到目前为止我的内容是以下代码: function mymodule_node_view($node, $view_mode = 'full', $langco...

0  隐藏特定内容类型中的本地选项卡  ( Hide local tabs in specific content type ) 
我想隐藏特定内容类型的本地选项卡。我怎样才能做到这一点?自从我想在其他内容类型中向他们展示以来,我不想删除它 ...

4  如何创建一个接受唯一值的字段?  ( How do i create a field that accepts only unique values ) 
我正在使用字段集合模块,因为我在字段之间有一些复杂的关系,我有试图将其与唯一字段模块集成,而不会成功,因为 字段不支持唯一字段模块集合模块。 有没有更简单的方法检查值是否是唯一的,并且要显示验证错误,如果值不是唯一的? 不幸的是,Drupal 7默认情况下没有此功能,因此必须有一种方法来执行此操作。 ...

1  Drupal 7视图,路径,通过分类节点关联  ( Drupal 7 views paths node associations via taxonomy ) 
在很多小时后,我仍然不能在让我的情况工作中围绕着我的头脑。这是: 我现在正在使用如此/艺术家/艺术家名称路由内容类型艺术家的清洁网址。我有内容类型:arists,专辑发布,旅游日期和媒体。我想使用词汇艺术家标签将所有东西系在一起(是的,甚至艺术家内容类型会被标记)。所以,例如,我在艺术家内容中有"测试艺术家" 。我用...

29  表单中的动态选择列表(依赖下拉列表)  ( Dynamic select list in the form dependent dropdown ) 
我正在使用drupal七。我想在SELECT列表中制作选项依赖于表单中另一个选择列表中选择的值。我相信这已经被询问了很多次,但我很难找到明确的答案,了解如何做到这一点。 表单用于用户输入工作历史记录。它们需要选择一个中队,该中队是对Squadron字段类型的节点引用,这是在下拉列表中。但是,中队,取决于城市下拉列表。...

2  将默认值设置为空结果,视图暴露过滤器  ( Set default to empty result with views exposed filters ) 
我正在使用视图(7.x-3.0-beta3),我已经为视图创建了一个公开的文本过滤器,工作正常。 问题是默认结果值:当字段为空时,显示所有可能的结果。但我想默认情况下显示空结果。如果您有解决方案,请剪切。 ...

2  在Drupal 7中,“由Drupal供电”块的代码在哪里?  ( In drupal 7 where is the code for the powered by drupal block ) 
"由drupal供电" 块曾经是Drupal 6中的模块。我找不到Drupal 7中的这个模块。我在哪里找到这个模块/块?所以我可以复制它,或修改它。 ...

0  在哪里放置脚本以提供ajax / json响应?  ( Where to put a script to provide ajax json response ) 
我正在使用drupal 7.我想创建一个使用drupals db抽象层来查询数据库并吐出JSON数据的PHP脚本。我会在哪里放置这样的脚本?目前,我通过创建一个新的节点,然后在 function theme_process_page() theme/template.php 的 function theme_pro...

2  使用Git将核心和模块保持最新状态  ( Using git to keep core and modules up to date ) 
我正在寻找一种使用git来拉动核心和模块的方法。让我们说,例如,我从Drupal Git克隆Drupal Core,并提交自己的Git Repo;然后,我提取一堆模块,也提交给自己的git repo。 这是可能的吗?我可以在从其他存储库中签出的存储库中的子文件夹吗?我仍然可以使用drupal保持我的代码最新吗?也许我...

8  如何将CSS类添加到渲染阵列?  ( How to add a css class to an render array ) 
在模板文件中,之前 print render($content['field_image']); 我想向 998887661 渲染阵列中的图像添加CSS类。我怎样才能做到这一点? 这是渲染阵列: Array ( [#theme] => field [#weight] => 2 [#title] => Image ...

0  拥有150多个用户字段太重了吗?  ( Is having 150 user fields too heavy ) 
我们的用户实体为公共配置文件有大约5个字段,以及5个字段,设置设置的设置为我们的实现需要60个其他字段(我想到了制作60个"计算字段" )。最后一个可以覆盖用户,所以我们需要另外60秒来存储用户输入的值(不遗留默认值)和30个字段以充当指示使用默认或自定义版本(30个标志是否足够的标志因为60个字段成对,它们是30对...

2  网站离线通知  ( Site offline notification ) 
如何关闭有关站点的通知在维护模式下脱机? 在维护模式下运行。上网。 ...

0  如果页面URL包含“页面=”,则不会呈现使用视图创建的块  ( A block created with views is not rendered if the page url contains page ) 
我有一个奇怪的问题。我正在使用Drupal 7和Omega Subtheme。在视图中,我有一个块定义,它很棒 - 出现它在网站上都应该在网站上 - 除非URL有一个"?页面=" 。有些可能相关的信息:CLEAN_URL和PATHAUTO启用,已安装的三角形和布局,但没有定义DELTAS。 当我创建了一个页面视图(不...

1  在块中显示自定义字段  ( Show a custom field in a block ) 
我疯了试图在侧栏块中显示自定义字段(现在在核心)的值。我试图用渲染函数来显示它,直接调用字段,没有运气。 我有一个名为"content1" 的自定义内容类型,以及名为"field_test1" 的自定义字段;我希望在查看页面节点时将在块上显示该值。 你有什么建议如何做到吗? ...

0  在主题上实现hook_block_configure  ( Implement hook block configure on theme ) 
是否可以在主题内实现钩子_block_configure?我想拥有一个与每个块中的主题相关的配置,但不希望在模块中实现这一点,因为我会生成从主题到模块的依赖关系。 ...




© 2021 it.wenda123.org All Rights Reserved. 问答之家 版权所有


Licensed under cc by-sa 3.0 with attribution required.