Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Чекбоксы выбора категорий в админке


Recommended Posts

Переделываю модуль отображения категорий

Была задача переделать стандартный список категорий с автодополнением на список с чекбоксами

Добавил форму в шаблоне по аналогии из шаблона товара.

<div class="form-group">
                <label class="col-sm-2 control-label" for="input-category"><?php echo $entry_category; ?></label>
                <div class="col-sm-10">
                  <div class="well well-sm" style="min-height: 150px;max-height: 500px;overflow: auto;">
                    <table class="table table-striped">
                    <?php foreach ($categories as $category) { ?>
                    <tr>
                      <td class="checkbox">
                        <label>
                          <?php if (in_array($category['category_id'], $category)) { ?>
                          <input type="checkbox" name="category[]" value="<?php echo $category['category_id']; ?>" checked="checked" />
                          <?php echo $category['name']; ?>
                          <?php } else { ?>
                          <input type="checkbox" name="category[]" value="<?php echo $category['category_id']; ?>" />
                          <?php echo $category['name']; ?>
                          <?php } ?>
                        </label>
                      </td>
                    </tr>
                    <?php } ?>
                    </table>
                  </div>
                  </div>
              </div>

 

Категории отображаются, выбранные пишутся в базу и отображаются на сайте, но все чекбоксы постоянно имеют атрибут checked="checked" 

 

Подскажите пожалуйста где ошибка?

Надіслати
Поділитися на інших сайтах


В контроллере 

$this->load->model('catalog/category');
		
		$filter_data = array(
			'sort'        => 'name',
			'order'       => 'ASC'
		);

		$data['categories'] = $this->model_catalog_category->getCategories($filter_data);
		
		
		if (!empty($this->request->post['category'])) {
			$categories = $this->request->post['category'];
		} elseif (!empty($module_info['category'])) {
			$categories = $module_info['category'];
		} else {
			$categories = array();
		}

 

Надіслати
Поділитися на інших сайтах


Ваша беда вот тут:

image.png.2ae967b1b0997d7de5faf87df099ebdc.png

Вы переменную в цикле назвали как массив данных о категориях товара.

 

Это:

<?php foreach ($categories as $category) { ?>

Заменить на это:

<?php foreach ($categories as $category2) { ?>

И все вхождения:

$category[

Заменить на:

$category2[

 

Надіслати
Поділитися на інших сайтах

10 часов назад, mpn2005 сказал:

Ваша беда вот тут:

image.png.2ae967b1b0997d7de5faf87df099ebdc.png

Вы переменную в цикле назвали как массив данных о категориях товара.

 

Это:


<?php foreach ($categories as $category) { ?>

Заменить на это:


<?php foreach ($categories as $category2) { ?>

И все вхождения:


$category[

Заменить на:


$category2[

 

 

сделал так как вы сказали но так тоже все чекбоксы активны 

 

<table class="table table-striped">
                    <?php foreach ($categories as $category2) { ?>
                    <tr>
                      <td class="checkbox">
                        <label>
                          <?php if (in_array($category2['category_id'], $category2)) { ?>
                          <input type="checkbox" name="category[]" value="<?php echo $category2['category_id']; ?>" checked="checked" />
                          <?php echo $category2['name']; ?>
                          <?php } else { ?>
                          <input type="checkbox" name="category[]" value="<?php echo $category2['category_id']; ?>" />
                          <?php echo $category2['name']; ?>
                          <?php } ?>
                        </label>
                      </td>
                    </tr>
                    <?php } ?>
                    </table>

 

Надіслати
Поділитися на інших сайтах


2 минуты назад, mx928 сказал:

сделал так как вы сказали но так тоже все чекбоксы активны 

Нет. Сделали вы совсем не то, что я писал.

Описал же пошагово, прямо по заменам.

image.png.f980a094a1c5f341cf177448288f8187.png

Откуда в обведённом месте у вас получилось $category2 ?

Когда должно быть просто $category

Надіслати
Поділитися на інших сайтах

21 минуту назад, mpn2005 сказал:

Нет. Сделали вы совсем не то, что я писал.

Описал же пошагово, прямо по заменам.

image.png.f980a094a1c5f341cf177448288f8187.png

Откуда в обведённом месте у вас получилось $category2 ?

Когда должно быть просто $category

 

Извините невнимательно прочитал 

 

<table class="table table-striped">
                    <?php foreach ($categories as $category2) { ?>
                    <tr>
                      <td class="checkbox">
                        <label>
                          <?php if (in_array($category2['category_id'], $category)) { ?>
                          <input type="checkbox" name="category[]" value="<?php echo $category2['category_id']; ?>" checked="checked" />
                          <?php echo $category2['name']; ?>
                          <?php } else { ?>
                          <input type="checkbox" name="category[]" value="<?php echo $category2['category_id']; ?>" />
                          <?php echo $category2['name']; ?>
                          <?php } ?>
                        </label>
                      </td>
                    </tr>
                    <?php } ?>
                    </table>

Исправил но теперь не срабатывает условие  <?php if (in_array($category2['category_id'], $category)) { ?> (все чекбоксы неактивны)

 

 

Надіслати
Поділитися на інших сайтах


21 минуту назад, mx928 сказал:

Исправил но теперь не срабатывает условие  <?php if (in_array($category2['category_id'], $category)) { ?> (все чекбоксы неактивны)

Теперь показывайте код контроллера, в какую переменную укладываете выбранные категории товара.

В первом посте приведён не полный код.

Надіслати
Поділитися на інших сайтах

$this->load->model('catalog/category');
		
		$data['category'] = $categories;
		
		$filter_data = array(
			'sort'        => 'name',
			'order'       => 'ASC'
		);

		$data['categories'] = $this->model_catalog_category->getCategories($filter_data);

		if (!empty($this->request->post['category'])) {
			$categories = $this->request->post['category'];
		} elseif (!empty($module_info['category'])) {
			$categories = $module_info['category'];
		} else {
			$categories = array();
		}

		foreach ($categories as $category_id) {
			$category_info = $this->model_catalog_category->getCategory($category_id);

			if ($category_info) {
				$data['categories'][] = array(
					'category_id' => $category_info['category_id'],
					'name'       => $category_info['name']
				);
			}
		}

Контроллер 

Надіслати
Поділитися на інших сайтах


В 09.04.2021 в 15:58, mpn2005 сказал:

Подозреваю, что после вот этого:
image.png.c7712769d329ed5707e4cbde6147dd6b.png

 

Вы не написали:

$data['category'] = $categories;

 

 mpn2005 Спасибо за помощь! 

 

Получилось так (Может кому то пригодится ): 

 

Контроллер 

 

$this->load->model('catalog/category');

		$filter_data = array(
			'sort'        => 'name',
			'order'       => 'ASC'
		);

		$data['categories'] = $this->model_catalog_category->getCategories($filter_data);

		if (!empty($this->request->post['category'])) {
			$categories = $this->request->post['category'];
		} elseif (!empty($module_info['category'])) {
			$categories = $module_info['category'];
		} else {
			$categories = array();
		}
		
		$data['category'] = $categories;

 

Шаблон

 

 <div class="form-group">
                <label class="col-sm-2 control-label" for="category"><?php echo $entry_category; ?></label>
                <div class="col-sm-10">
                  <div class="well well-sm" style="min-height: 150px;max-height: 500px;overflow: auto;">
                    <table class="table table-striped">
                    <?php foreach ($categories as $featured_category) { ?>
                    <tr>
                      <td class="checkbox">
                       <label>
                            <input type="checkbox" name="category[]" value="<?php echo $featured_category['category_id']; ?>"<?php echo in_array($featured_category['category_id'], $category) ? 'checked="checked" ' : ''; ?> />
                            <?php echo $featured_category['name']; ?> </label>
                      </td>
                    </tr>
                    <?php } ?>
                    </table>
                  </div>
                  <a onclick="$(this).parent().find(':checkbox').prop('checked', true);"><?php echo $text_select_all; ?></a> / <a onclick="$(this).parent().find(':checkbox').prop('checked', false);"><?php echo $text_unselect_all; ?></a></div>
              </div>

 

  • +1 1
Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.