问题描述
|
我们可以使用SafeCracker使用2个或更多“ textarea”字段吗?
{exp:safecracker channel=\"letters_to_editor\" return=\"site/thank_you\" entry_id=\"{segment_3}\" status=\"Closed\"}
<p><label for=\"Subject\">Subject:</label><br />
<input type=\"text\" name=\"title\" id=\"title\" value=\"{title}\" size=\"50\" maxlength=\"100\">
{custom_fields}
{if textinput}
<p><label for=\"Name\">Your Name:</label><br />
<input type=\"text\" name=\"{field_name}\" value=\"{field_data}\" id=\"{field_name}\" size=\"50\" /></p>
{/if}
{if textarea}
<p><label for=\"letter-content\">Your Question:</label><br />
<textarea id=\"{field_name}\" name=\"{field_name}\" rows=\"10\" cols=\"50\">{field_data}</textarea></p>
{/if}
{/custom_fields}
<p><input type=\"submit\" value=\"Submit\"></p>
{/exp:safecracker}
我想要的是供访客输入的内容:
学科
他们的名字
他们的问题
我希望所有这些字段都在后端填充,因此后端有以下字段:
主题= {title}
名称= {questioners_name} ==>文字输入
问题= {question_bodytext} ==>文本区域
我在后端需要另一个文本区域
答案= {answer_bodytext} ==>文字区域
但是,当我创建任意两个字段时,它们[字段]在站点的表单显示中出现两次。
在SafeCracker仅询问主题,名称和问题的地方,它也为答案添加了另一个文本区域,即使我没有在表格中添加它。它两次显示文本区域。
如何解决这个问题?
解决方法
当您使用“ 1”标记对时,SafeCracker将始终循环遍历所有自定义字段。在这种情况下,您要做的就是使用字段名称对各个字段进行编码。
{exp:safecracker channel=\"letters_to_editor\" return=\"site/thank_you\" entry_id=\"{segment_3}\" status=\"Closed\"}
<p>
<label for=\"title\">Subject:</label><br />
<input type=\"text\" name=\"title\" id=\"title\" value=\"{title}\" size=\"50\" maxlength=\"100\" />
</p>
<p>
<label for=\"questioners_name\">Your Name:</label><br />
<input type=\"text\" name=\"questioners_name\" value=\"{questioners_name}\" id=\"questioners_name\" size=\"50\" />
</p>
<p>
<label for=\"question_bodytext\">Your Question:</label><br />
<textarea id=\"question_bodytext\" name=\"question_bodytext\" rows=\"10\" cols=\"50\">{question_bodytext}</textarea>
</p>
<p><input type=\"submit\" value=\"Submit\" /></p>
{/exp:safecracker}
, D-Rock是正确的,当您使用{custom_fields}
标签对时,SafeCracker将循环浏览并显示指定通道的所有自定义字段。
根据您使用SafeCracker的方式,它可能具有积极的并可能节省大量时间的功能。
例如,如果您要创建带有数十个自定义字段的注册或事件表单,那么让它们全部自动输出完全是一件乐事。但是,如果您的需求更简单,那么输出一些不需要的自定义字段可能会令人沮丧。
解决此问题的一种惰性方法是允许动态输出所有自定义字段,但可以使用CSS有选择地隐藏不需要的字段。
考虑以下SafeCracker代码:
{exp:safecracker channel=\"letters_to_editor\" return=\"site/thank_you\"}
<p class=\"title\">
<label for=\"Subject\">Subject</label><br />
<input type=\"text\" name=\"title\" id=\"title\" />
</p>
{custom_fields}
{if textinput}
<p class=\"{field_name}\">
<label for=\"{field_name}\">{field_label}</label><br />
<input type=\"text\" id=\"{field_name}\" name=\"{field_name}\" />
</p>
{/if}
{if textarea}
<p class=\"{field_name}\">
<label for=\"{field_name}\">{field_label}</label><br />
<textarea id=\"{field_name}\" name=\"{field_name}\"></textarea>
</p>
{/if}
{/custom_fields}
<p><input type=\"submit\" value=\"Submit\"></p>
{/exp:safecracker}
它将输出以下HTML(为澄清起见,已简化):
<form method=\"post\" action=\"#\">
<p class=\"title\">
<label for=\"Subject\">Subject</label><br />
<input type=\"text\" name=\"title\" id=\"title\" />
</p>
<!-- Start of Dynamic Custom Fields -->
<p class=\"questioners_name\">
<label for=\"questioners_name\">Name</label><br />
<input name=\"questioners_name\" id=\"questioners_name\" type=\"text\" />
</p>
<p class=\"question_bodytext\">
<label for=\"question_bodytext\">Question</label><br />
<textarea id=\"question_bodytext\" name=\"question_bodytext\"></textarea>
</p>
<p class=\"answer_bodytext\">
<label for=\"answer_bodytext\">Answer</label><br />
<textarea id=\"answer_bodytext\" name=\"answer_bodytext\"></textarea>
</p>
<!-- End of Dynamic Custom Fields -->
<input type=\"submit\" value=\"Submit\" />
</form>
使用单个CSS规则,您可以隐藏Answer Textarea,使其不显示在表单中:
<style>
.answer_bodytext { display: none; }
</style>
这种方法的强大功能是利用ѭ7并将其用作CSS挂钩以隐藏您不想显示的字段。
可以理解,这是解决问题的一种极其懒惰的方法,并且实际上不会从页面中删除表单元素。取而代之的是,这是一种技术含量低的方法,可以选择性地隐藏特定的自定义字段,而无需手动对整个表单进行硬编码-非常适合对时间敏感的更改或懒惰的程序员!