首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我们可以使用SafeCracker使用2个或更多的"textarea“字段吗?

我们可以使用SafeCracker使用2个或更多的"textarea“字段吗?
EN

Stack Overflow用户
提问于 2011-05-27 11:41:55
回答 2查看 333关注 0票数 0

我们可以使用SafeCracker使用2个或更多的"textarea“字段吗?

代码语言:javascript
复制
{exp:safecracker channel="letters_to_editor" return="site/thank_you" entry_id="{segment_3}" status="Closed"}
        <p><label for="Subject">Subject:</label><br />
           &lt;input type="text" name="title" id="title" value="{title}" size="50" maxlength="100"&gt;

                 {custom_fields}
                    {if textinput}

                        <p><label for="Name">Your Name:</label><br />
                           &lt;input type="text" name="{field_name}" value="{field_data}" id="{field_name}" size="50" /&gt;&lt;/p>
                    {/if}

                    {if textarea}
                        <p><label for="letter-content">Your Question:</label><br />
                           &lt;textarea id="{field_name}" name="{field_name}" rows="10" cols="50"&gt;{field_data}&lt;/textarea&gt;&lt;/p>
                    {/if}
                 {/custom_fields}
        <p>&lt;input type="submit" value="Submit"&gt;&lt;/p>
{/exp:safecracker}

我想让来访者进入:

  1. 主题
  2. 他们的名字
  3. 他们的问题

我希望在后端填充所有这些字段,因此在后端有以下字段:

  1. 主题={标题}
  2. 名称= {questioners_name} ==>文本输入
  3. 问题= {question_bodytext} ==>文本区域

我需要后端的另一个文本区域

  1. 答案= {answer_bodytext} ==>文本区域

但是当我创建任何字段中的2个时,这些字段在站点上的表单显示中会出现两次。

在SafeCracker只询问主题、名称和问题的情况下,它还为答案添加了另一个文本区域,尽管我没有在表单中添加它。它将文本区域显示两次。

如何解决这个问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-27 13:51:00

当您使用{custom_fields}标记对时,SafeCracker将始终遍历所有自定义字段。在这种情况下,您需要做的只是使用各自的字段名对各个字段进行编码。

代码语言:javascript
复制
{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}
票数 1
EN

Stack Overflow用户

发布于 2011-06-16 20:33:37

D是正确的,当您使用{custom_fields}标记对时,SafeCracker将遍历并显示指定通道的所有自定义字段。

根据您使用SafeCracker的方式,这可以具有积极的和潜在的巨大的节省时间的功能。

例如,如果您要创建一个具有数十个自定义字段的注册或事件表单,那么让所有这些字段自动输出都是纯粹的幸福。然而,如果您的需求更简单,有一些不必要的自定义字段输出可能会令人沮丧。

解决此问题的一种懒散方法是允许动态地输出所有自定义字段,但使用CSS.有选择地隐藏不需要的字段。

考虑以下SafeCracker代码:

代码语言:javascript
复制
{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 (简化,用于澄清):

代码语言:javascript
复制
<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隐藏起来,以免出现在表单中:

代码语言:javascript
复制
<style>
    .answer_bodytext { display: none; }
</style>

这种方法的强大关键是利用<p class="custom_field_name">并使用它作为CSS隐藏您不想显示的字段。

要知道,这是非常懒散地解决问题的方法,实际上不会从页面中删除表单元素。相反,这是一种低技术的方法,可以选择性地隐藏特定的自定义字段,而不必手动对整个表单进行硬编码--非常适合时间敏感的更改或懒惰的程序员!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6151744

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档