我们可以使用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}我想让来访者进入:
我希望在后端填充所有这些字段,因此在后端有以下字段:
我需要后端的另一个文本区域
但是当我创建任何字段中的2个时,这些字段在站点上的表单显示中会出现两次。
在SafeCracker只询问主题、名称和问题的情况下,它还为答案添加了另一个文本区域,尽管我没有在表单中添加它。它将文本区域显示两次。
如何解决这个问题?
发布于 2011-05-27 13:51:00
当您使用{custom_fields}标记对时,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}发布于 2011-06-16 20:33:37
D是正确的,当您使用{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规则,您可以将答案Textarea隐藏起来,以免出现在表单中:
<style>
.answer_bodytext { display: none; }
</style>这种方法的强大关键是利用<p class="custom_field_name">并使用它作为CSS隐藏您不想显示的字段。
要知道,这是非常懒散地解决问题的方法,实际上不会从页面中删除表单元素。相反,这是一种低技术的方法,可以选择性地隐藏特定的自定义字段,而不必手动对整个表单进行硬编码--非常适合时间敏感的更改或懒惰的程序员!
https://stackoverflow.com/questions/6151744
复制相似问题