Drupal

Drupal开发人员和管理员的问答



1
哪些mysql表包含URL别名路径数据?
我正在尝试手动更改节点的URL路径,因为我的编辑按钮在单击它时引发了一个错误,因为这是由于某些其他已卸载模块遗留的孤立数据所致。哪些表包含Drupal 7中的URL别名路径数据?
9 7  path-aliases 

3
删除组件后,Webform数据会怎样?我可以更改组件类型吗?
我继承了一个复杂的Webform,其中包含数百个提交。组件之一是文本字段,用于捕获表单提交者的电子邮件地址。由于某种原因,这是一个文本字段,而不是一个电子邮件字段,这使我无法使用该电子邮件地址发送确认电子邮件。 如果要删除文本字段电子邮件组件,所有数据将如何处理?我假设它将被删除。 有什么办法可以在保留数据的同时更改表单组件的类型? 更新:我正在使用Drupal 7和Webform 3.19
9 7  webforms 

2
Views上下文过滤器如何工作?
我正在尝试再次围绕上下文过滤器展开讨论!我曾经用过它,但是我又完全陷入了困境。这是我想做的事情: 生成带有分类术语插入到此克隆页面中的克隆内容节点页面。 例如:EXAMPLE.com/white-shoes/blue 当用户到达/ white-shoes页面时,它将显示面向白色的原始节点页面。现在,如果用户落在/ white-shoes / blue上,它将显示相同的节点页面,但是这次将重写所有正文内容,将白色替换为蓝色。 在“ 视图”中,我必须创建一个页面显示,其路径为:%/% 现在,我将创建一个上下文过滤器来检索nid。我添加Content:nid作为上下文过滤器。我选择提供默认值,然后输入以下PHP代码: $ x = drupal_lookup_path('源',arg(0)); $ y = explode('/',$ x); 返回$ y 1 ; 该PHP代码基本上将URL的/ white-shoes部分转换为NID。但它不起作用。我通过终端通过drush ev测试了代码,确实得到了返回的结果,所以我知道它可以工作。 我对分类术语名称进行了相同的操作,并为此添加了上下文过滤器。这次,我选择“ 提供默认值”并选择“ 来自URL的原始值”,然后选择第二个参数。 如您所见,当我为上下文过滤器输入预览值:AAA / BBB / CCC时。我的默认值被忽略。它本来应该抓住第二个参数,但是只有第一个。查看SQL语句WHERE,当它应该是BBB时,它将得到AAA。 所以问题是我在做错什么,还是对我想要完成的事情有更好的解决方案?
9 7  commerce  views 

9
删除13000个节点
我在Drupal 7站点中有大约13000个要删除的节点。我尝试过“ 视图批量操作”模块一次删除500个节点,但是超时。我一次只能删除50个节点。 如何一次删除50个以上的节点?
9 views  nodes 

2
如何更改“ form_set_error”输出的位置?
Drupal 7中有没有一种方法可以更改输出的位置form_set_error? 此刻,它调用drupal_set_message将所有表单错误排队到屏幕顶部。 相反,我希望每个消息都显示在相应字段的下方。 如果无法做到这一点,是否可以在不使用MODULE_form_name_validate()功能的情况下手动将表单标记为“无效” form_set_error?
9 7  forms 

5
如何获取上次插入的记录ID?
我想获取数据库表中最后插入的行的记录ID。我正在尝试使用db_last_insert_id(),但是它引发了异常。 调用未定义的函数 db_last_insert_id() 如何获取上次插入的记录ID?
9 7  database 

3
在自定义模块中通过文件字段以编程方式创建内容类型
我正在编写一个自定义模块,这是我之前做过的,但这是我第一次尝试使用字段创建内容类型。我实现了hook_node_info,内容类型显示在admin_menu下拉列表中的内容类型列表中,但是当我浏览到admin/structure/types它时未列出。 我实现了hook_install,并获取了在另一个SO问题上发现的一些代码。我已经将代码打印出一些调试信息到我的错误日志中,并且看起来一切正常,但是当我浏览到“结构内容类型”时,它没有显示我添加的字段。 这是钩子: function mymod_node_info() { return array( 'mymod_content' => array( 'name' => t('My Mod'), 'base' => 'mymod_content', 'description' => t('A Description'), ) ); } function mymod_install() { error_log('mymod_install'); $types = node_type_get_types(); if ( ! field_info_field('field_mymod_myfile') ) { $field = array( 'field_name' => 'field_mymod_myfile', 'type' => 'file', ); $created_field = …

3
如何加快drupal的node_save()函数?
node_save()的效率低下给我带来很多麻烦。但是节点可以解决我的问题吗?最终,这就是我想要找出的。 我创建了一个具有100,000次迭代的循环。我创建了使节点对象有效并正确保存的最低要求。这是节点保存代码: $node = new stdClass(); $node->type = "test_page"; node_object_prepare($node); $node->uid = 1; $node->title = $node_title; $node->status = 1; $node->language = LANGUAGE_NONE; if($node = node_submit($node)){ node_save($node); } 结果如下: 保存了100,000个节点,每个节点都使用node_save()。完成了5196.22秒。那就是19节省一秒钟。 至少可以说,这是不可接受的,特别是当此人每秒获得大约1200个单独的插入查询,并且这个人每秒获得25,000个插入时。 那么,这是怎么回事?瓶颈在哪里?是否与node_save()函数一起使用以及如何设计? 可能是我的硬件吗?我的硬件是一台开发服务器,除我之外没有人可以使用-Intel双核,3Ghz,Ubuntu 12.04和16 gig的ram。 在循环运行时,我的资源使用情况是:MySQL 27%CPU,6M RAM;PHP 22%CPU 2M RAM。 我的mysql配置由percona向导完成。 Mysql说,如果我的CPU使用率低于70%,我的问题就是磁盘绑定。当然,我只有WD Caviar 7200 RPM磨粉机,但我希望它每秒能获得超过19次插入! 不久之前,我写过关于每天节省30,000个节点的文章。但是,需要明确的是,该节点与任何外力无关。纯粹是了解如何提高对node_save()的调用速度的基准。 实际上,我需要使用node_save每分钟将30,000个项目放入数据库。如果不选择保存节点,我想知道我是否可以编写自己的drupal api函数“ node_batch_save()”或利用mysql的INSERT查询功能进行批量插入的功能。关于如何处理此问题的想法?
9 7  performance  nodes 

5
如何正确删除字段集合?
Drupal版本:7.21 字段收集模块版本:7.x-1.0-beta5 简短说明:我正忙于尝试以编程方式导入字段集合,但是在删除其中一些字段时,总会剩下一些“伪”字段集合。 详细说明:我的用户的个人资料上有一个字段收集字段。该字段集合包含3个文本字段。我想将数据从自定义sql数据库导入到用户的字段集合中。该字段集合可以具有多个值。当我第一次导入数据时,一切正常,我在字段集合的字段中看到了数据。大。 但是,这是棘手的部分。假设我为一个特定用户从定制数据库中导入了5行。它们被添加到字段集合中,因此此字段集合有5个项目,每个项目包含3个字段。然后,从自定义数据库中删除一些行,以使该用户仅剩下3行。我再次运行导入,更新了字段集合的前3个项目,但是接下来剩下的是前一次导入的2个项目。应该删除它们,因为我只有3个导入行,但仍然有5个字段收集项。 因此,我尝试删除这些字段收集项,但始终剩下一个或多个项。当我查看用户个人资料时,这些字段为空,但那里还是有东西。假设此时我在自定义数据库中为该用户添加了5个新行,因此该用户总共有8行。然后,我再次运行导入。前3个项目得到更新,但是当我尝试添加第4行时,它仍然从第4个字段集合项中获取实体ID,尝试对其进行更新,但失败并返回此错误: Fatal error: Call to undefined method stdClass::save() 我尝试使用以下每种方法删除字段收集项: // Method 1 entity_delete_multiple('field_collection_item', array($fc_id)); // Method 2 $field_collection_item = field_collection_item_load($fc_id); $field_collection_item->delete(); // Method 3 $field_collection_item = field_collection_item_load($fc_id); $field_collection_item->deleteRevision(); 这是我的完整代码: function import_user_field_collection(&$user, $old_user_id) { // I do a query to get the rows I want to …
9 7  entities 

2
如何使用Drush的并发执行功能?
我正在使用Drupal多站点(单个代码库,多个站点/ *)。与此同时,我已经开始使用Drush别名来管理它们: $ cat sites/all/drush/aliases.drushrc.php <?php $aliases['localdev'] = array( 'site-list' => array( 'site1', 'site2', 'site3', ), ); ?> 这使我可以轻松地在所有站点上执行操作: $ drush @localdev cc all >> 我还发现我可以只使用@sites,而放弃drushrc文件。 这样做,将在我的每个系列站点(一次一个)中执行“ cc all”。 我想借此到一个新的水平,并尝试在所有网站上运行这些命令simulantiously。我一直在做一些阅读,和上午的印象是Drush 不 确实支持这一点。该drush_invoke_process()函数需要$ backend_options,它可以包含(从函数文档): * 'invoke-multiple' * If $site_alias_record represents a single site, then 'invoke-multiple' * will cause the _same_ command …

9
视图3以编程方式删除暴露的过滤器
我有几种节点类型,每种类型都引用了不同的分类术语词汇。对于显示类别,我使用taxonomy_display模块。 例如,我们有两类:球杆和台球。 提示有价格,价格和木质过滤器。但是球没有木质过滤器。 因此,如果taxonomy_term tid引用了台球词汇,则需要删除木质过滤器。 因此,我需要以编程方式删除许多公开的过滤器之一。 function modulename_views_pre_view(&$view, &$display_id, &$args) { // Some custom logic wich field_info_instances checking ... $filter_field = 'filter_id'; // Removes from everywhere where i can find filter or filters properties unset($view->display[$view->current_display]->display_options['filters'][$filter_field]); unset($view->display[$view->current_display]->handler->options['filters'][$filter_field]); unset($view->display_handler->display->display_options['filters'][$filter_field]); unset($view->display_handler->options['filters'][$filter_field]); } 筛选器字段删除成功,但是我有php通知: Notice: Undefined index: field_wood_reference_tid in function views_handler_filter_term_node_tid->exposed_validate() 我也尝试删除hook_pre_execute()中的字段,但结果相同: function modulename_views_pre_execute(&$view) …
9 7  views 


1
为什么正文字段的语言不会保存为与节点相同的语言?
我遇到了一个问题,用户正在创建新节点并输入正文,但是将节点设置为该语言的“语言中立”。但是,当它保存节点时,正文字段的语言将设置为英语。为什么会这样呢?是什么原因造成的? 在此站点上,我们同时启用和配置了英语和法语。该站点是运行i18n的D7。 这类似于节点编辑页面中的“空正文”,不同之处在于,我想知道该字段将如何获得与节点最初不同的语言。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.