Перейти к содержимому


Фотография
- - - - -

Изменение формы подачи материала после выбора категории


Лучший Ответ SmetDenis , 01 December 2015 - 08:59

Есть два способа решить этот вопрос.

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

Чтобы Zoo видел шаблоны материла как формы подачи, необходимо указать тип submission, name - это имя файла.
s6ki_200x0.png

Очевидный минус - кодпий шаблонов будет столько же сколько категорий.

Второй.

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

$params = $submission->params->find('form.' . $item->type);

if ($params['category'] == 42) {
    $this->renderPosition('fields-cat-42', array('style' => 'submission.block'))

} elseif ($params['category'] == 43) {
    $this->renderPosition('fields-cat-43', array('style' => 'submission.block'))
    
} elseif ($params['category'] == 44) {
    $this->renderPosition('fields-cat-44', array('style' => 'submission.block'))
}

$this->renderPosition('custom-fields', array('style' => 'submission.block'))

Перейти к сообщению


  • Закрытая тема Тема закрыта
Сообщений в теме: 6

#1 MOKEV

MOKEV

Отправлено 20 November 2015 - 14:20

Добрый день!

 

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

Для одной категории такой вывод:

<tr class="table-row item_<?php echo $item->id;?>">
	<td><?php echo $this->renderPosition('Parametr1'); ?></td>
	<td><?php echo $this->renderPosition('Parametr2'); ?></td>
	<td><?php echo $this->renderPosition('Parametr5'); ?></td>
	<td><?php echo $this->renderPosition('Parametr4'); ?></td>
	<td><?php echo $this->renderPosition('Parametr7'); ?></td>
	<td><?php echo $this->renderPosition('Parametr8'); ?></td>
	<td><?php echo $this->renderPosition('Parametr10'); ?></td>
</tr>

Для другой категории такой вывод:

<tr class="table-row item_<?php echo $item->id;?>">
	<td><?php echo $this->renderPosition('Parametr4'); ?></td>
	<td><?php echo $this->renderPosition('Parametr5'); ?></td>
	<td><?php echo $this->renderPosition('Parametr7'); ?></td>
	<td><?php echo $this->renderPosition('Parametr6'); ?></td>
	<td><?php echo $this->renderPosition('Parametr1'); ?></td>
	<td><?php echo $this->renderPosition('Parametr3'); ?></td>
	<td><?php echo $this->renderPosition('Parametr11'); ?></td>
</tr>

Может быть кто-нибудь уже сталкивался с подобным или просто есть готовое решение?

 


Сообщение отредактировал Evgeny_M: 20 November 2015 - 14:21

  • 0

#2 SmetDenis

SmetDenis

Отправлено 23 November 2015 - 08:28

Боюсь что для вашей задачи нет готового решения.

Обычно разный набор параметров у материалов - это разные типы материалов.
И как раз такой вариант уже реализован в Zoo.

Что вам мешает использовать разные типы материалов ?
  • 1
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#3 MOKEV

MOKEV

Отправлено 24 November 2015 - 14:26

У меня очень много категорий, но многие отличаются всего несколькими параметрами. Если делать для каждой отдельный тип, то потом ещё придется ещё для каждого типа модуль делать. Вот я подумал таким образом сократить количество типов.

 

P.S. Вот например была ещё идея решить задачу с помощью javascript. Т.е. к селекту выбора категории подцепить по выбору значения изменение стилей блоков:

document.getElementById("elements_itemcategoryvalue")
    .onchange = function () {
        var b = {
            17: "cat17",
            59: "cat59",
            62: "cat62",
            60: "cat60",
            61: "cat61",
            57: "cat57",
            63: "cat63",
            64: "cat64",
            58: "cat58",
            65: "cat65",
            66: "cat66",
            55: "cat55",
            56: "cat56",
            54: "cat54",
            53: "cat53",
            52: "cat52",
            51: "cat51",
            50: "cat50",
            49: "cat49"
        }, c = this.value,
            a;
        for (a in b) document.getElementById(b[a])
            .style.display = 0 == c || c == a ? "block" : "none"
};

Ну и соответственно все нужные рендеры загнать в блоки. Но как сделать, чтобы блоки, которые скрыты(не выбраны) не учитывались при добавлении?


  • 0

#4 SmetDenis

SmetDenis

Отправлено 29 November 2015 - 00:13

Можете сказать мне 2-3 разных условия разных категорий.

Я попробую написать вам небольшой рецепт без JavaScript.

 

Думаю вы сможете проникнуться смыслом и сделать это для всех.


  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#5 MOKEV

MOKEV

Отправлено 30 November 2015 - 12:42

Можете сказать мне 2-3 разных условия разных категорий.

Я попробую написать вам небольшой рецепт без JavaScript.

 

Думаю вы сможете проникнуться смыслом и сделать это для всех.

Например, 1-ая категория "Транзисторы биполярные малой мощности"

2-ая категория "Транзисторы биполярные средней мощности"

3-яя категория "Транзисторы биполярные большой мощности"

 

Параметры, к примеру: 1-ая категория- "Постоянная мощность коллектора", "Граничная частота", "Коэффициент шума"

2-ая категория- "Постоянная мощность коллектора", "Ток коллектора", "Граничная частота"
3-яя категория- "Граничная частота", "Ток утечки затвора", "Постоянная мощность коллектора"


  • 0

#6 SmetDenis

SmetDenis

Отправлено 01 December 2015 - 08:59   Лучший Ответ

Есть два способа решить этот вопрос.

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

Чтобы Zoo видел шаблоны материла как формы подачи, необходимо указать тип submission, name - это имя файла.
s6ki_200x0.png

Очевидный минус - кодпий шаблонов будет столько же сколько категорий.

Второй.

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

$params = $submission->params->find('form.' . $item->type);

if ($params['category'] == 42) {
    $this->renderPosition('fields-cat-42', array('style' => 'submission.block'))

} elseif ($params['category'] == 43) {
    $this->renderPosition('fields-cat-43', array('style' => 'submission.block'))
    
} elseif ($params['category'] == 44) {
    $this->renderPosition('fields-cat-44', array('style' => 'submission.block'))
}

$this->renderPosition('custom-fields', array('style' => 'submission.block'))


  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#7 MOKEV

MOKEV

Отправлено 01 December 2015 - 09:33

Спасибо


  • 0




Click to return to top of page in style!