我想为注册用户创建一个输入表单,与管理员的内容创建表单分开。每次提交都会创建多个节点。 为了说明案例,我将使用内容类型Project 和Review。
项目:标题、描述、所有者、评级。 p>
审稿:标题,审稿人,项目,难度
我已经使用 CCK 模块设置了内容类型及其字段。我想创建一个为注册成员(member)(非管理员)显示的输入表单。它的字段包括项目名称、描述、所有者、评级、评论、< em="">困难。
提交表单后,项目名称、描述、所有者和评级值进入新的Project 节点,其余部分进入新的Review 节点。
我想做的另一个定制是评级和难度输入字段使用star rating input .
实现此目标的最佳方法是什么?我应该创建自定义模块和自定义表单吗(谁能指出我该怎么做)?或者是否有任何我可以使用的模块?
谢谢
最佳答案
有几种方法可以做到这一点:
一切从零开始:这就是theunravelers suggestion (+1) 归结为 - 自己构建表单,添加自己的验证和提交处理程序,并在提交时构建两个节点对象并保存它们。您将拥有完全的控制权/灵 active ,但这是一项相当大的工作,您需要对 Drupals 的内部运作有很好的了解才能正确处理。
使用另一个所需的字段“重载”您的一种内容类型,并调整“重载”内容类型提交(和部分编辑/显示)逻辑以从其他字段创建其他内容类型,同时将它们隐藏在显示和编辑的“重载”中。你可以find an article describing this approach here .这是一种比 #1 简单得多的方法,但我认为它有点“hackish”,因为内容类型定义与显示不匹配。
#2 的一个不那么“老套”的变体是正常设置您的内容类型,然后通过 hook_form_alter() 操作编辑和提交过程。 .您会或多或少地与方法 #2 相同,但不是预先使用附加字段“重载”一个节点,您只需将它们直接注入(inject)到 hook_form_alter 上的编辑表单中(从头开始或通过在后台加载其他节点的编辑表单并从中复制相关字段定义)。在提交表单时,您可以删除这些额外的字段,同时使用它们来构建您的其他节点。这需要比 #2 多一点的工作和知识,但应该比它更稳定并且更容易调整/维护,因为您不必处理内容类型定义与显示不匹配。
此外,您没有指定要如何处理现有节点的编辑 - 我建议向其中一个节点添加节点引用以跟踪它们的关联。这样,如果需要,您还可以添加逻辑以从一个表单编辑两个节点以及同步删除。
关于php - Drupal 自定义节点表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1683488/
我正在尝试设置一个puppet节点,但rubygems似乎不正常。如果我通过它自己的二进制文件(/usr/lib/ruby/gems/1.8/gems/facter-1.5.8/bin/facter)在cli上运行facter,它工作正常,但如果我通过由rubygems(/usr/bin/facter)安装的二进制文件,它抛出:/usr/lib/ruby/1.8/facter/uptime.rb:11:undefinedmethod`get_uptime'forFacter::Util::Uptime:Module(NoMethodError)from/usr/lib/ruby
我得到了一个包含嵌套链接的表单。编辑时链接字段为空的问题。这是我的表格:Editingkategori{:action=>'update',:id=>@konkurrancer.id})do|f|%>'Trackingurl',:style=>'width:500;'%>'Editkonkurrence'%>|我的konkurrencer模型:has_one:link我的链接模型:classLink我的konkurrancer编辑操作:defedit@konkurrancer=Konkurrancer.find(params[:id])@konkurrancer.link_attrib
我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer
我想向我的Controller传递一个参数,它是一个简单的复选框,但我不知道如何在模型的form_for中引入它,这是我的观点:{:id=>'go_finance'}do|f|%>Transferirde:para:Entrada:"input",:placeholder=>"Quantofoiganho?"%>Saída:"output",:placeholder=>"Quantofoigasto?"%>Nota:我想做一个额外的复选框,但我该怎么做,模型中没有一个对象,而是一个要检查的对象,以便在Controller中创建一个ifelse,如果没有检查,请帮助我,非常感谢,谢谢
我已经从我的命令行中获得了一切,所以我可以运行rubymyfile并且它可以正常工作。但是当我尝试从sublime中运行它时,我得到了undefinedmethod`require_relative'formain:Object有人知道我的sublime设置中缺少什么吗?我正在使用OSX并安装了rvm。 最佳答案 或者,您可以只使用“require”,它应该可以正常工作。我认为“require_relative”仅适用于ruby1.9+ 关于ruby-主要:Objectwhenrun
我有一个服务模型/表及其注册表。在表单中,我几乎拥有服务的所有字段,但我想在验证服务对象之前自动设置其中一些值。示例:--服务Controller#创建Action:defcreate@service=Service.new@service_form=ServiceFormObject.new(@service)@service_form.validate(params[:service_form_object])and@service_form.saverespond_with(@service_form,location:admin_services_path)end在验证@ser
我有一些代码在几个不同的位置之一运行:作为具有调试输出的命令行工具,作为不接受任何输出的更大程序的一部分,以及在Rails环境中。有时我需要根据代码的位置对代码进行细微的更改,我意识到以下样式似乎可行:print"Testingnestedfunctionsdefined\n"CLI=trueifCLIdeftest_printprint"CommandLineVersion\n"endelsedeftest_printprint"ReleaseVersion\n"endendtest_print()这导致:TestingnestedfunctionsdefinedCommandLin
我有一个只接受一个参数的方法:defmy_method(number)end如果使用number调用方法,我该如何引发错误??通常,我如何定义方法参数的条件?比如我想在调用的时候报错:my_method(1) 最佳答案 您可以添加guard在函数的开头,如果参数无效则引发异常。例如:defmy_method(number)failArgumentError,"Inputshouldbegreaterthanorequalto2"ifnumbereputse.messageend#=>Inputshouldbegreaterthano
我使用Ember作为我的前端和GrapeAPI来为我的API提供服务。前端发送类似:{"service"=>{"name"=>"Name","duration"=>"30","user"=>nil,"organization"=>"org","category"=>nil,"description"=>"description","disabled"=>true,"color"=>nil,"availabilities"=>[{"day"=>"Saturday","enabled"=>false,"timeSlots"=>[{"startAt"=>"09:00AM","endAt"=>
我想获取模块中定义的所有常量的值:moduleLettersA='apple'.freezeB='boy'.freezeendconstants给了我常量的名字:Letters.constants(false)#=>[:A,:B]如何获取它们的值的数组,即["apple","boy"]? 最佳答案 为了做到这一点,请使用mapLetters.constants(false).map&Letters.method(:const_get)这将返回["a","b"]第二种方式:Letters.constants(false).map{|c