Перейти к содержанию

tolkodelo

Пользователи
  • Публикаций

    65
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о tolkodelo

  • Звание
    Пользователь
  1. Все, понял. Я в первом месте получал нужные ID (с сортировкой по sort_order), потом искал в category_description их имена, там видимо сортировка и терялась. Сделал вот так: //Есть массив категорий верхнего уровня - $ancestor $children = $third_children = array(); //Получаем категории второго уровния: ID и NAME $sql = 'SELECT oc_category.category_id, name FROM oc_category, oc_category_description WHERE oc_category.parent_id=' . $ancestor . ' AND oc_category_description.category_id= oc_category.category_id AND status=1 ORDER BY sort_order ASC '; //Обрабатываем категории второго уровня foreach ($this->db->query($sql)->rows as $second_level_item) { $second_level_data = $second_level_item; //Имя и ID категории для меню второго уровня //Данные для третьего уровня $sql = 'SELECT oc_category.category_id, name FROM oc_category, oc_category_description WHERE oc_category.parent_id=' . $second_level_item['category_id'] . ' AND oc_category_description.category_id= oc_category.category_id AND status=1 ORDER BY sort_order ASC '; //Обрабатываем категории третьего уровня: ID, NAME и массив дочерних foreach ($this->db->query($sql)->rows as $value) { $sql = 'SELECT oc_category.category_id, name FROM oc_category, oc_category_description WHERE oc_category.parent_id=' . $value['category_id'] . ' AND oc_category_description.category_id= oc_category.category_id AND status=1 ORDER BY sort_order ASC '; $third_children[] = array( 'name' => $value['name'], 'id' => $value['category_id'], 'children' => $this->db->query($sql)->rows); }; //пишем массив $children[] = array( 'id' => $second_level_item['category_id'], 'name' => $second_level_item['name'], 'children' => $third_children ); }; return $children; Заработало
  2. Написал свой файл модели, который берет из базы 4 уровня категорий для вставки в меню. В model у меня такая строка запроса: 'SELECT category_id FROM oc_category WHERE parent_id="' . (переменная) . '" AND status="1" ORDER BY sort_order ASC'; Если поставить в модели print_r([переменная, которую возвращает функция]), выдает найденный массив в порядке, установленном sort_order: Array ( [0] => Array ( [category_id] => 222, [sort_order] => 10 ), [1] => Array ( [category_id] => 111, [sort_order] => 20 ) ) В контроллере код такого вида: foreach ((массив id родительских категорий) as $parent_category) { $menu_children = $this->model_additional_categories->get_category_children($parent_category['id']); $data['menu_children'][] = (!empty($menu_children))? array('parent_category' => $parent_category['id'], 'children' => $menu_children) : 'void'; } После того, как данные проходят через контроллер хедера, сортировка меняется на сортировку по id категории... Array ( [0] => Array ( [category_id] => 111, [sort_order] => 20 ), [1] => Array ( [category_id] => 222, [sort_order] => 10 ) ) Не понимаю, как с этим побороться. Как OC меняет сортировку, и что бы с этим сделать? Нужна сортировка по sort_order в этом месте
  3. В общем, я пытался сделать так: $sql = 'SELECT name FROM category_description WHERE category_id="121")'; $db = $this->db->query($sql); $categories[] = array('id' => implode($value), 'name' => $db); а надо было так, не учел что $db это объект: $db = $this->db->query($sql); $row = $db->rows; $categories[] = array('id' => implode($value), 'name' =>$db->row['name']); Что конечно не объясняет массива без ключей вообще (не с пустыми именами ключей, а вообще). Но хоть проблему решил.
  4. Спасибо за подсказку похихикал над собой
  5. print_r($test); // выдает array(=> array(=> элемент1) => array(=> элемент2)) print_r($test['0']); //выдает array(=> элемент1) print_r($test['0']['0']); // ошибка Undefined offset Хмммм.......
  6. Я со скрипом разбираюсь в MVC Opencart, вот главная затея... Задача, которую я взял: получить из базы и вывести категории, у которых нет родителей. Ага, thentru, понял насчет боковой колонки, это случай когда мы берем шаблон и с ним работаем в контроллере. Вроде бы с вашей ангельской помощью разобрался с выводом переменной, теперь вот ломаю голову над чем. В модели: //получаем несколько имен категорий из базы $sql = 'SELECT name FROM shop_category_description WHERE category_id IN (1,2,3,4,5)'; $names = $this->db->query($sql); foreach($names->rows as $value){ $categories[] = $value; } return $categories; В контроллере хедера: $this->load->model("additional/categories"); $data['test'] = $this->model_additional_categories->get_parentless_categories(); В шаблоне print_r($test); И он мне выдает массив с неназванными ключами, т.е. Array( => Array( => Категория 1 ) => Array( => Категория 2 ) ) Я пытался сделать : $i = 0; foreach($parentless_categories_names as $name){ $data['test'][$i] = implode($name); $i++; } Результата ноль
  7. А если я хочу написать чисто свой контроллер? (Разбираюсь с MVC). Могу ли я подключить его потом в header через $data['test2'] = $this->load->controller('additional/parents');? Или по-другому, могу ли я прописать в своем новом контроллере что-то типа return $this->load->view('common/header', $data);
  8. Я вообще то делаю? Мне нужно переменную из контроллера вывести в шаблоне header
  9. Сделал, все равно undefined variable: <?php class ControllerAdditionalParents extends Controller{ public function index() { $data['test'] = "Тестовая переменная"; $this->template = $this->config->get('config_template') . '/template/common/header.tpl'; if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/common/header.tpl')) { $this->response->setOutput($this->load->view($this->config->get('config_template') . '/template/common/header.tpl', $data)); } else { $this->response->setOutput($this->load->view('default/template/common/header.tpl', $data)); } } } ?>
  10. Смотрите, вот что я пишу. в файле controller/additional/parents.php <?php class ControllerAdditionalParents extends Controller{ public function index() { $data['test'] = "Тестовая переменная"; $this->template = $this->config->get('config_template') . '/template/common/header.tpl'; $this->response->setOutput($this->render()); } } ?> В common/header.tpl: <?php echo $test;?> Выдает Notice: Undefined variable: test Что ему не так?
  11. Стал выкладывать сюда код и увидел... Затесался странный апостроф в строку sql запроса! Убрал, заработало. Спасибо, уважаемые!!! )))) Сколько раз я подбирался к MVC опенкарта и бросал )) А есть подробная документация "от разработчиков" по Opencart? Типа как Кодекс ВордПресс? Вот например Chukcha писал " Так случилось, что переменная $data в ОС "зарезервирована" для шаблона " - нигде раньше я об этом не читал.
  12. Слушайте, а я писал переменные внутри вот этого метода: class ControllerSimpleBlogArticle extends Controller { public function index() { /*.........*/ }} Внутри метода index поместил код "$foo = 'bar'; var_dump($foo);" - не выводит. Внутри метода view выводит. Методы внутри контроллеров вообще идут стандартные? Вообще, есть для Опенкарта что-то типа Кодекса, как для Вордпресса? Теперь дальше: //Внутри метода view прописал переменную $data['articleCategories'] = 'bar'; в шаблоне она успешно ВЫВОДИТСЯ: echo $articleCategories; //НО! Вот так не выводится - получаю БЕЛЫЙ ЭКРАН $data['articleCategories'] = $this->model_simple_blog_article->getCategoryForBreadcrumbs($simple_blog_article_id); //при этом на строку выше стоит, и ведь работает: $article_info = $this->model_simple_blog_article->getArticle($simple_blog_article_id); А в модели рядом стоят: public function getCategoryForBreadcrumbs($article_id = 0) { /*.......*/} public function getArticles($data = array()) { /*.......*/} Ну где же я косячу ((((
  13. n3bo, chukcha, спасибо за ответ! Да, я видел, что рядом в коде так передается, ставил. Может быть, тогда делал ошибку в другом месте. Пробую... Ну вот - в контроллере поставил $data['articleCategories'] = $this->model_simple_blog_article->getCategoryForBreadcrumbs($this->request->get['simple_blog_article_id']); В шаблоне я должен поставить $data['articleCategories'] или $articleCategories? В любом случае мне выдает undefined variable И еще.... А почему я вижу в коде рядом? - //контроллер $article_info = $this->model_simple_blog_article->getArticle($simple_blog_article_id); if($article_info) { $this->document->setTitle($article_info['article_title']); $this->document->setDescription($article_info['meta_description']); $this->document->setKeywords($article_info['meta_keyword']); if ($article_info['description']) { if (method_exists($this->document, 'add_AddThisMeta')) { $this->document->add_AddThisMeta('description', str_replace('"', '\'', strip_tags(html_entity_decode($article_info['description'], ENT_QUOTES, 'UTF-8')))); } } $data['article_info_found'] = $article_info; } //шаблон <?php if (isset($article_info_found)) { ?> <article class="article-info"> <div class="article-title"> <h1><?php echo $article_info['article_title'] ?></h1> </div> <div class="article-sub-title"> <span class="article-date material-design-clock100"><?php echo $article_date_modified; ?></span> <?php if ($article_info['allow_comment']) { /*...*/ } /*...*/ } ?> И оно работает
  14. Дорогие, уважаемые форумчане, помогите пожалуйста разобраться, как работает схема MVC в opencart! С какого боку к ней не подбирался, ничего не получается ( идея вроде понятна, но ничего из того, что пишу, не работает. Например. В теме есть блог. Мне надо добавить в навигационную цепочку (breadcrumbs) пункт, обозначающий категорию статьи в блоге/ Собрал по анаогии с существующими функциями. В файле model пишу: class ModelSimpleBlogArticle extends Model { public function getCategoryForBreadcrumbs($article_id = 0) { $sql = $this->db->query("SELECT * FROM `" . DB_PREFIX . "simple_blog_article_to_category WHERE simple_blog_article_id=" . $article_id); return $sql->rows; } } в файле controller пишу: $articleCategories = $this->model_simple_blog_article->getCategoryForBreadcrumbs($this->request->get['simple_blog_article_id']); в шаблоне пишу (чтобы проверить себя): <?php print_r($articleCategories); ?> Выдает мне "undefined variable". Что не так делаю?...
×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.