Можем ли мы использовать 2 или более полей «textarea» с помощью SafeCracker? - PullRequest
0 голосов
/ 27 мая 2011

Можем ли мы использовать 2 или более полей "textarea" с помощью SafeCracker?

{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. Subject = {title}
  2. Name = {questioners_name} ==> Ввод текста
  3. Question = {question_bodytext} ==> Текстовая область

Мне нужна еще одна текстовая область в бэкэнде

  1. Answer = {answer_bodytext} ==> Текстовая область

Но когда я создаю 2 любых поля, они [поля] появляются дважды в отображении формы на сайте.

Если SafeCracker запрашивает только тему, имя и вопрос, он также добавляет еще одну текстовую область для ответа, даже если я не добавил его в форму,Текстовое поле отображается дважды.

Как решить эту проблему?

Ответы [ 2 ]

1 голос
/ 17 июня 2011

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 вы можете скрыть текстовое поле ответа, отображаемое в форме:

<style>
    .answer_bodytext { display: none; }
</style>

Мощным ключом к этому подходу является использование <p class="custom_field_name"> и использование его в качестве крючка CSS дляскрыть поля, которые вы не хотите отображать.

Поймите, это чрезвычайно ленивый способ решения проблемы , и он фактически не удалит элементы формы со страницы.,Наоборот, это низкотехнологичный способ выборочного сокрытия определенных пользовательских полей без необходимости вручную жестко кодировать всю форму - идеально подходит для чувствительных ко времени изменений или ленивых программистов!

1 голос
/ 27 мая 2011

Когда вы используете пару тегов {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}
...