Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

Создание таблицы через ocmod


Recommended Posts

День добрый.

Слегка модифицировал стандартный модуль 'купоны'. Просто внес пару изменений в файлы и создал в базе 2 новые таблицы. 
Хочу оформит это все дело как модуль. Изменения файлов делаю через ocmod - все работает.
А вот как создать 2 таблицы через ocmod ( я так понял в OC3 это невозможно ) или через public function install() совершенно не понятно.
Подскажите если кто в курсе вопроса.

Link to post
Share on other sites

или function install, или install.sql с нужными запросами в корне архива модуля

Link to post
Share on other sites

То есть: есть файл test.ocmod.zip в котором лежит единственный install.xml. И есть запрос в базу: 
 

CREATE TABLE IF NOT EXISTS `oc_test` (
`test_id` int(11) NOT NULL AUTO_INCREMENT,
`test_2_id` int(11) NOT NULL,
PRIMARY KEY (`test_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=10


 

Который надо куда то вставить, а куда я так и не понял.

Нашел статью https://webocreation.com/blog/opencart-3-ocmod-coding-tutorial/ :

If you are trying to create a table or insert data in the table then you need to create the install method in your controller. Like public function install().

А куда этот метод вставлять? в какой контроллер? об этом в статье решили не распространяться. На гитхабе про public function install() вобще ни слова ( https://github.com/opencart/opencart/wiki/Modification-System ). 

Edited by ampakine
Link to post
Share on other sites

install.sql  в OpenCart 3 упразднили.

 

А вот про  function install можно по подробнее ?

Edited by ampakine
Link to post
Share on other sites

7 minutes ago, ampakine said:

А вот про  function install можно по подробнее

а ее - в install.php

$this->db->query("CREATE TABLE IF NOT EXISTS `" . DB_PREFIX . "foo-bar...

 Если в тройке и это не упразднили :) Если честно, за тройкой пока не сильно слежу

 

upd: и вроде не единственный install.xml, а еще вроде как папку upload требует. Даже пустую

Link to post
Share on other sites

Да в том то и дело, что install.php тоже упразднили. Такие дела.

Вот что на гитхабе пишут:

 

File Structure

Example file structure for OCMOD compressed files.

  • upload
  • install.xml

upload

All files under this directory will be uploaded to the to directory of your OpenCart installation.

install.xml

The XML modification file.

 

 

Ни install.php ни install.sql !!!   Ей богу ну вот чем они мешали им?

Edited by ampakine
Link to post
Share on other sites

Нашел модуль, который возвращает этот функционал тройке.

Но хотелось бы обойтись без него.

Edited by ampakine
Link to post
Share on other sites

 

1 час назад, ampakine сказал:

Который надо куда то вставить, а куда я так и не понял.

 

Попробуйте через Система - Обслуживание - Бекап 

Link to post
Share on other sites
49 минут назад, ampakine сказал:

Да в том то и дело, что install.php тоже упразднили. Такие дела.

 

 

Кстати, забавно.

Посмотрел в контроллере - действительно все выпилено кроме xml

 

Но существует модуль 

Расширенный установщик дополнений Ocmod для Opencart 3

Лол.

Link to post
Share on other sites

в тройке упразднили install.sql / install.php

если голова на плечах - не нужны никакие "расширенные установщики"

 

при наличии управляющего контроллера (админка) у устанавливаемого модуля - для создания таблиц использовать в нем метод install

тогда при установке модуля (в списке модулей админки) код из install будет выполнен

если мод из одного только xml и контроллера нет - цеплять проверку и создание данных в самом xml в подходящем месте

Link to post
Share on other sites

плюс если что-то меняете/добавляете в стандартных таблицах движка - обязательно указывайте этот момент в описании своего модуля

данная информация облегчит жизнь и пользователям, и коллегам по цеху и в конечном итоге вам самому

Link to post
Share on other sites

8 часов назад, LiLu сказал:

 Если в тройке и это не упразднили

Это базовое

Т.е. не только XML, но и обвес в виде модуля

Link to post
Share on other sites
8 часов назад, LiLu сказал:

а еще вроде как папку upload требует.

Тройка не требует, а  2-ка просила
 

Link to post
Share on other sites

В принципе, если это задача не столь нагружена, то создание таблицы, или добавление полей, можно  добавить в xml функционал
Но!!!! Лучше так не делать для паблика, но, рррррррррр,  на офсайте такого полно.

Link to post
Share on other sites

@chukcha так по итогу - как делать?

В контроллере модуля функции isntall/uninstall, других путей не остается простых?

Link to post
Share on other sites

3 минуты назад, LiLu сказал:

других путей не остается простых?

Увы, затраты на 3 файла минимум (Язык, Контроллер, Вью)
Вот сюда можно впихнуть все: описание, ссылку на поддержу и прочее

Но Если это не модуль, то будет писать - ОТКЛЮЧЕНО ...ррррр....

Или ... - уже писал

Link to post
Share on other sites

р

4 часа назад, AlexDW сказал:

при наличии управляющего контроллера (админка) у устанавливаемого модуля - для создания таблиц использовать в нем метод install

тогда при установке модуля (в списке модулей админки) код из install будет выполнен

если мод из одного только xml и контроллера нет - цеплять проверку и создание данных в самом xml в подходящем месте

Управляющий модуль admin/controller/marketing/coupon.php - то есть в него надо прописать:

 

public install(){
$this->db->query("CREANE TABLE IF EXISTS ...

Я так пробовал - то есть в ocmod вносил такое - так yе работает.

 

Или нужно в папке upload создать контроллер  admin/controller/marketing/test.php c таким кодом? - так тоже пробовал и тоже не работает.

 

AlexDW, Не могли бы по подробнее пояснить как сделать что бы таблица все таки создавалась?

 

Edited by ampakine
Link to post
Share on other sites

4 часа назад, chukcha сказал:

В принципе, если это задача не столь нагружена, то создание таблицы, или добавление полей, можно  добавить в xml функционал

 

Можете показать пример такого xml?

Link to post
Share on other sites

1 час назад, ampakine сказал:

Управляющий модуль admin/controller/marketing/coupon.php - то есть в него надо прописать:

 

public install(){
$this->db->query("CREANE TABLE IF EXISTS ...

 

нет, читайте внимательно

6 часов назад, AlexDW сказал:

при наличии управляющего контроллера (админка) у устанавливаемого модуля - для создания таблиц использовать в нем метод install

 

в вашем случае, раз управляющих файлов нет и весь ваш модуль состоит только из xml

то если, например, добавляете свой функционал в admin/controller/marketing/coupon.php - в нем же и делайте проверку на наличие нужных данных в БД и добавление их при отсутствии

Link to post
Share on other sites

Спасибо, получилось.  

В admin/controller/marketing/coupon.php  в  public function index()  добавил метод модели 

$this->db->query("CREATE TABLE IF NOT EXISTS ...

Таблица создалась, но теперь при каждом заходе на страницу купонов в админке скрипт будет лезть в базу и смотреть нет ли там этих таблиц.

Нет ли более элегантого способа? То есть что бы такая проверка была один раз на этапе загрузки модификатора?

 

 

 

Edited by ampakine
Link to post
Share on other sites

Сделайте два окмода. Один - только для создания таблицы. А потом его выпилить, и ставить рабочий :eek:
Альтернативный вариант - делайте полноценный интерфейс к модулю в админке, с кнопочкой "установить таблицы"

Edited by Shureg
Link to post
Share on other sites

4 часа назад, ampakine сказал:

Таблица создалась, но теперь при каждом заходе на страницу купонов в админке скрипт будет лезть в базу и смотреть нет ли там этих таблиц

подсчитайте количество запросов и время выполнения до и после

(для чистоты эксперимента остальной свой код кроме CREATE уберите)

Link to post
Share on other sites

17 часов назад, ampakine сказал:

Спасибо, получилось.  

В admin/controller/marketing/coupon.php  в  public function index()  добавил метод модели 

$this->db->query("CREATE TABLE IF NOT EXISTS ...

Таблица создалась, но теперь при каждом заходе на страницу купонов в админке скрипт будет лезть в базу и смотреть нет ли там этих таблиц.

Нет ли более элегантого способа? То есть что бы такая проверка была один раз на этапе загрузки модификатора?

 

 

 

Я писал про "При ненагруженных "
но... Вы не так часто, у вас там запросов всего ничего от силы 10
так что ваших 2-3 особой роли не сыграют
Тем более запросы типа SHOW COLUMNS - имеют малую стоимость

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.