Нужно исправить код PHP по проверке категорий у продавца магазина

300 руб. за проект
05 марта 2021, 08:58 • 3 отклика • 41 просмотр
В движке магазина на Model-View-Controller PHP, по дефолту 3 категории вложенности размещения товаров. Категории создаются не динамически, а вписаны в код по счёту, 1,2,3.
Хочу добавить в движок магазина 4-ую категорию вложенности.
Добавляю.
Категории в админке теперь создаются, 3 или 4 вложенности.
За категории отвечает один общий файл-контроллер категорий магазина и для каждого компонента свой контроллер.
Каждому продавцу, при создании его магазина, присваивается несколько категорий с первого уровня по четвертый. Это сделал, работает.
Дошел до файла размещения товара в магазине продавца.
В контроллере Sellergoodsadd.php, который отвечает за размещение нового товара в магазине продавца, есть кусок кода, который проверяет какие выбраны категории для размещения товара, сверяет с привязанными к продавцу, который размещает сейчас товар и при успешной проверке переходит на следующую страницу, либо выдает ошибку проверки: Ваш магазин не привязан к этой категории. Выберите привязанную категорию.
Я внес изменения в этот код, добавил проверку 4-х вложенной категории, но проверку не проходит. Выдает ошибку: Ваш магазин не привязан к этой категории. Выберите привязанную категорию.
Выбираю категорию три вложенности - получаю одобрение. Выбираю четыре вложенности - получаю ошибку.

Нужно, чтобы проверка проходила успешно и для 3-х категорий вложенности и для 4-х категорий вложенности.

Если кому по силам понять что я здесь написал и сможет поправить код, буду признателен.
Оплачу на карту банка, после того, как проверю работоспособность кода..

Оригинальный код с проверкой только категорий с 3 вложенностью:
<code lang="php">
// Модель классификации товара
$goodsclass_model = model('goodsclass');

$gc_id = intval(input('get.class_id'));

// Убедитесь, что категория товара существует, и категория товара является последним уровнем
$data = model('goodsclass')->getGoodsclassForCacheModel();
if (!isset($data[$gc_id]) || isset($data[$gc_id]['child']) || isset($data[$gc_id]['childchild'])) {
$this->error(lang('store_goods_index_again_choose_category1'));
}

//Оригинальный код
if (!check_platform_store_bindingall_goodsclass()) {
$storebindclass_model = model('storebindclass');
$goods_class = model('goodsclass')->getGoodsclassForCacheModel();
$condition = array();
$condition[] = array('store_id', '=', session('store_id'));

$class_2 = isset($goods_class[$gc_id]['gc_parent_id'])?$goods_class[$gc_id]['gc_parent_id']:0;
$class_1 = isset($goods_class[$class_2]['gc_parent_id'])?$goods_class[$class_2]['gc_parent_id']:0;
$condition_class_1 = array(array('class_1', '=', ($class_1 > 0) ? $class_1 : (($class_2 > 0) ? $class_2 : $gc_id)));
$condition_class_2 = array(array('class_2', '=', ($class_1 > 0) ? $class_2 : (($class_2 > 0) ? $gc_id : 0)));
$condition_class_3 = array(array('class_3', '=', ($class_1 > 0 && $class_2 > 0) ? $gc_id : 0));

$bind_info = $storebindclass_model->getStorebindclassInfo(array_merge($condition,$condition_class_1,$condition_class_2,$condition_class_3));
if (empty($bind_info)) {
$condition_class_3 = array(array('class_3', '=',0));
$bind_info = $storebindclass_model->getStorebindclassInfo(array_merge($condition,$condition_class_1,$condition_class_2,$condition_class_3));
if (empty($bind_info)) {
$condition_class_2 = array(array('class_2', '=', 0));
$condition_class_3 = array(array('class_3', '=', 0));
$bind_info = $storebindclass_model->getStorebindclassInfo(array_merge($condition,$condition_class_1,$condition_class_2,$condition_class_3));
if (empty($bind_info)) {
$condition_class_1 = array(array('class_1', '=', 0));
$condition_class_2 = array(array('class_2', '=', 0));
$condition_class_3 = array(array('class_3', '=', 0));
$bind_info = $storebindclass_model->getStorebindclassInfo(array_merge($condition,$condition_class_1,$condition_class_2,$condition_class_3));
if (empty($bind_info)) {
$this->error(lang('Ваш магазин не привязан к этой категории. Выберите привязанную категорию.'));
}
}
}
}
}

</code>

Код с моими исправлениями, где я добавил проверку выбранной категории с 3 и с 4 вложенностью:
(там где вносил изменения, пометил комментарием Vaska)
<code lang="php">
// Модель классификации товара
$goodsclass_model = model('goodsclass');

$gc_id = intval(input('get.class_id'));

// Убедитесь, что категория товара существует, и категория товара является последним уровнем
$data = model('goodsclass')->getGoodsclassForCacheModel();
if (!isset($data[$gc_id]) || isset($data[$gc_id]['child']) || isset($data[$gc_id]['childchild'])) {
$this->error(lang('store_goods_index_again_choose_category1'));
}

//Измененный мною код
if (!check_platform_store_bindingall_goodsclass()) {
$storebindclass_model = model('storebindclass');
$goods_class = model('goodsclass')->getGoodsclassForCacheModel();
$condition = array();
$condition[] = array('store_id', '=', session('store_id'));
// Здесь что-то неправильно сделал, я так думаю
$class_3 = isset($goods_class[$gc_id]['gc_parent_id'])?$goods_class[$gc_id]['gc_parent_id']:0; //Vaska
$class_2 = isset($goods_class[$gc_id]['gc_parent_id'])?$goods_class[$gc_id]['gc_parent_id']:0;
$class_1 = isset($goods_class[$class_2]['gc_parent_id'])?$goods_class[$class_2]['gc_parent_id']:0;
$condition_class_1 = array(array('class_1', '=', ($class_1 > 0) ? $class_1 : (($class_2 > 0) ? $class_2 : $gc_id)));
$condition_class_2 = array(array('class_2', '=', ($class_1 > 0) ? $class_2 : (($class_2 > 0) ? $gc_id : 0)));
$condition_class_3 = array(array('class_3', '=', ($class_1 > 0 && $class_2 > 0) ? $gc_id : 0));
$condition_class_4 = array(array('class_4', '=', ($class_2 > 0 && $class_3 > 0) ? $gc_id : 0)); //Vaska
//
$bind_info = $storebindclass_model->getStorebindclassInfo(array_merge($condition,$condition_class_1,$condition_class_2,$condition_class_3,$condition_class_4)); //Vaska
if (empty($bind_info)) {
$condition_class_4 = array(array('class_4', '=',0));
$bind_info = $storebindclass_model->getStorebindclassInfo(array_merge($condition,$condition_class_1,$condition_class_2,$condition_class_3,$condition_class_4)); //Vaska
if (empty($bind_info)) {
$condition_class_3 = array(array('class_3', '=',0));
$condition_class_4 = array(array('class_4', '=',0)); //Vaska
$bind_info = $storebindclass_model->getStorebindclassInfo(array_merge($condition,$condition_class_1,$condition_class_2,$condition_class_3,$condition_class_4)); //Vaska
if (empty($bind_info)) {
$condition_class_2 = array(array('class_2', '=', 0));
$condition_class_3 = array(array('class_3', '=', 0));
$condition_class_4 = array(array('class_4', '=', 0)); //Vaska
$bind_info = $storebindclass_model->getStorebindclassInfo(array_merge($condition,$condition_class_1,$condition_class_2,$condition_class_3,$condition_class_4)); //Vaska
if (empty($bind_info)) {
$condition_class_1 = array(array('class_1', '=', 0));
$condition_class_2 = array(array('class_2', '=', 0));
$condition_class_3 = array(array('class_3', '=', 0));
$condition_class_4 = array(array('class_4', '=', 0)); //Vaska
$bind_info = $storebindclass_model->getStorebindclassInfo(array_merge($condition,$condition_class_1,$condition_class_2,$condition_class_3,$condition_class_4)); //Vaska
if (empty($bind_info)) {
$this->error(lang('Ваш магазин не привязан к этой категории. Выберите привязанную категорию.'));
}
}
}
}
}
}

</code>