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