Интересует возможность расширения стандартных объектов opencart. Вот к примеру к категориям мне надо добавить еще одно поле - short_description. Я понимаю как это замутить в админке, как это замутить в веб-морде, но пока не понимаю как это элегантно реализовать на уровне базы. Т.е. понятно что никто синтаксис SQL не отменял и можно добавить поле по образу и подобию, но может есть какие-то штатные средства по управлению полями объекта?
Дабавление поля в модель гарантирует автоматическое создание его в базе или надо рядом с модулем держать sql-файлик, в качестве памяти так сказать?
Для начала создаете дополнительное поле в таблице категории в БД потом ето поле в моделе дописиваете до существующих ся в места где есть функция адд и апдейт, потом контролер прописиваете и наконец шаблон правите --- добавлено: 30 янв 2013 в 01:15 --- Вот почитайте аналогично и с категориями и любими полями
Супер, только хотел попросить что-то для примера --- добавлено: 30 янв 2013 в 01:19 --- Кстати, была еще мысль сделать виртуальные поля. Т.е. в базе физически хранится одно поле, в котором два значения, разделенные через "|". А уже на уровне модели эти два значения транслируются в два поля. Плюсом такого варианта была бы обратная совместимость со старой базой и, соответственно, тривиальная установка . Но думаю пора завязывать с хаками.
Дак там есть пример только с товаром, категория все аналогично... Если хоть чтото понимаете в php то без проблем розберетесь, и розделитель зделаете(если ето нужно и логично) )
Такс, а теперь послание потомкам. Опенкарт я выбрал потому что на __первый взгляд__ там все было построено логично и просто, на базе MVC, а это означало простоту обработки напильником. Беру свои слова обратно Когда я столкнулся с задачей добавления поля, то вполне здоровый прагматизм, разбавленный обычной человеческой ленцой, помешал мне сразу полезть в код. И я полез по форумам искать готовые решения в виде ... ну конечно, модулей. Помнится я долго не мог понять почему же так и не нашлось готового модуля, ведь архитектура расширяемая. Так и не найдя готовых решений, я полез в код. Мать моя женщина . Очевидно разработчики поставили себе целью внедрить MVC, но при этом совершенно не понимали что это такое. Ну вот по логике, что нужно сделать, чтобы добавить одно поле к объекту? Верно, вначале добавить его в код сериализации в модель, потом заюзать во вьюхе. При этом в нормальном коде должно быть затронуто всего ... 2 участка кода в модели - сохранение и чтение. В опенкарте я нарисовал десяток заплаток, прежде чем впал в ступор: Код: $this->db->query("INSERT INTO `" . DB_PREFIX . "order` SET invoice_prefix = '" . $this->db->escape($invoice_prefix) . "', store_id = '" . (int)$data['store_id'] . "', store_name = '" . $this->db->escape($store_name) . "',store_url = '" . $this->db->escape($store_url) . "', customer_id = '" . (int)$data['customer_id'] . "', customer_group_id = '" . (int)$data['customer_group_id'] . "', firstname = '" . $this->db->escape($data['firstname']) . "', lastname = '" . $this->db ->escape($data['lastname']) . "', email = '" . $this->db->escape($data['email']) . "', telephone = '" . $this->db->escape($data['telephone']) . "', fax = '" . $this->db->escape($data['fax']) . "', payment_firstname = '" . $this->db->escape($ data['payment_firstname']) . "', payment_lastname = '" . $this->db->escape($data['payment_lastname']) . "', payment_company = '" . $this->db->escape($data['payment_company']) . "', payment_company_id = '" . $this->db->escape($data['payment_c ompany_id']) . "', payment_tax_id = '" . $this->db->escape($data['payment_tax_id']) . "', payment_address_1 = '" . $this->db->escape($data['payment_address_1']) . "', payment_address_2 = '" . $this->db->escape($data['payment_address_2']) . " ', payment_city = '" . $this->db->escape($data['payment_city']) . "', payment_postcode = '" . $this->db->escape($data['payment_postcode']) . "', payment_country = '" . $this->db->escape($payment_country) . "', payment_country_id = '" . (int) $data['payment_country_id'] . "', payment_zone = '" . $this->db->escape($payment_zone) . "', payment_zone_id = '" . (int)$data['payment_zone_id'] . "', payment_address_format = '" . $this->db->escape($payment_address_format) . "', payment_me thod = '" . $this->db->escape($data['payment_method']) . "', payment_code = '" . $this->db->escape($data['payment_code']) . "', shipping_firstname = '" . $this->db->escape($data['shipping_firstname']) . "', shipping_lastname = '" . $this->db ->escape($data['shipping_lastname']) . "', shipping_company = '" . $this->db->escape($data['shipping_company']) . "', shipping_address_1 = '" . $this->db->escape($data['shipping_address_1']) . "', shipping_address_2 = '" . $this->db->escape( $data['shipping_address_2']) . "', shipping_city = '" . $this->db->escape($data['shipping_city']) . "', shipping_postcode = '" . $this->db->escape($data['shipping_postcode']) . "', shipping_country = '" . $this->db->escape($shipping_country) . "', shipping_country_id = '" . (int)$data['shipping_country_id'] . "', shipping_zone = '" . $this->db->escape($shipping_zone) . "', shipping_zone_id = '" . (int)$data['shipping_zone_id'] . "', shipping_address_format = '" . $this->db->esc ape($shipping_address_format) . "', shipping_method = '" . $this->db->escape($data['shipping_method']) . "', shipping_code = '" . $this->db->escape($data['shipping_code']) . "', comment = '" . $this->db->escape($data['comment']) . "', order_ status_id = '" . (int)$data['order_status_id'] . "', affiliate_id = '" . (int)$data['affiliate_id'] . "', language_id = '" . (int)$this->config->get('config_language_id') . "', currency_id = '" . (int)$currency_id . "', currency_code = '" . $this->db->escape($currency_code) . "', currency_value = '" . (float)$currency_value . "', date_added = NOW(), date_modified = NOW()"); На тот случай, если разметка побьется - это одна строка. Нет, вы не поняли, это ОДНА СТРОКА. Это одна гребанная строка. И да, я могу сделать vqmod\file\operation=replace. Но как бы ... что с ним делать, если понадобится еще одно поле ( а мне нужно сразу 4 и я хотел это отдельными модулями организовать ). Прониклись? Теперь возвращаемся к канонам MVC: одна сущность - один комплект модели, вьюшки и контроллера. И под сущностью понимается ... верно, логический объект. Например отчет или страничка редактирования заказов. Тут, естественно, этого нет. А зачем? Все смешано в одну единственную модель и таких МОНОЛИТНЫХ строк в ней пачка. К чему это я... Ах да! Забудьте про vqMod и простоту накатывания апдейтов, если хотите расширить модель. Вам придется либо активно редактировать имеющиеся файлы, что будет теряться при апдейте движка, либо придется делать свой комплект файлов, что будет вызывать конфликты совместимости при апдейте движка. А между тем на улице уже появился 1.5.5.1. P.S. я обязательно добавлю гребанные поля в заказе и отпишусь. Почему? Потому что другие решения для интернет магазинов еще ужасней по тем или иным причинам.