Подскажите, как разделить массив такого вида.. Есть вложенность категорий, доходит до 4-5 уровней. Хочу создать чтобы вложенность по хлебным крошкам сохранилась, а в урле изменилась. Была /category/category максимум два уровня. Вопрос, как разделить массив там где идет 3-4 и более уровней. Входящий: PHP: Array( [0] => category_id=59 [1] => category_id=60 [2] => category_id=74) Должен получиться: PHP: Array( [0] => category_id=59 [1] => category_id=60)Array( [0] => category_id=59 [1] => category_id=74) array_chunk не совсем то делает
alex_storm, из твоего примера - никак. У тебя есть массив с абсолютно равнозначными значениями для которых не может быть уникального критерия для фильтрации. Тебе нужно не id категорий использовать, а path (если речь идёт про ОК).
Смотрю сейчас на этот код Предварительно делал так: PHP: if(count($parts > 2)) { unset($parts[1]);} foreach ($parts as $part) {$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE keyword = '" . $this->db->escape($part) . "'");if ($query->num_rows) { $url = explode('=', $query->row['query']);if ($url[0] == 'category_id') { if (!isset($this->request->get['path'])) { $this->request->get['path'] = $url[1]; } else { $this->request->get['path'] .= '_' . $url[1]; } } }} да, я удаляю второй элемент и вложенность. Но проблема сохраняется, т.е. ссылка все ок встает как нужно, но роута нет по ней, она идет на саму себя.
Тут даже не знаю, как быть. Если взять например обрезать через preg_replace от / до /, то все равно ссылка не изменится в опенкарте. Но работать будет) Честно говоря не знаю, где искать..
Какая у тебя задача? Не на уровне манипуляций с массивом, а какой результат ты хочешь получить от всего этого? Тебе нужно очистить ссылку от родительских категорий?
Задача проста. Есть родительская категория первого уровня и от нее все последующие вложенности должны не соблюдаться. Т.е. /url-1/url-2/url-3/url-4/url-5/ и т.д это по дефолту. А я хочу получить вот что /url-1/url-2 /url-1/url-3 /url-1/url-4 /url-1/url-5 Не смотря ни на что, вложенность должна быть не больше двух категорий на выводе в ссылке.
В общем, сделал костыль, другого решения пока не увидел. Там где идет rewrite($link) после } elseif ($key == 'path') { PHP: $categories = explode('_', $value); if(count($categories) == 3) { $first = array_shift($categories); $end = array_shift($categories); foreach ($categories as $category) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE `query` = 'category_id=" . (int)$category . "'"); if ($query->num_rows && $query->row['keyword']) { $url .= '/katalog/' . $query->row['keyword']; } else { $url = ''; break; } } }else{ foreach ($categories as $category) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE `query` = 'category_id=" . (int)$category . "'"); if ($query->num_rows && $query->row['keyword']) { $url .= '/' . $query->row['keyword']; } else { $url = ''; break; } } } Написал такое. По факту всегда подставляется одна категория. Вложенность не играет роли, проверял до 10 доходит и всегда будет выходить /katalog/categories-N Уверен, что есть другое адекватное решение, но пока не увидел)
А как оно до 10 может быть, если там на 3 проверка? Или я уже не помню, как path формируется. Вообще, проще сделать так: PHP: if(count($categories) > 2) { $categories = [reset($categories), end($categories)];}
Да, об этом как раз и не подумал... Почему до 10 доходит хз) Но формирование проходит четко. Единственная проблема, которая сейчас вытекла, это сообственно то, что хлебные крошки и родитель в меню потерялись. Придется походу костыль писать