Jump to content
ampakine

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

Recommended Posts

День добрый.

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

Share this post


Link to post
Share on other sites

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

Share this post


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

Share this post


Link to post
Share on other sites

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

 

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

Edited by ampakine

Share this post


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 требует. Даже пустую

Share this post


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

Share this post


Link to post
Share on other sites

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

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

Edited by ampakine

Share this post


Link to post
Share on other sites

 

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

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

 

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

Share this post


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

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

 

 

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

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

 

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

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

Лол.

Share this post


Link to post
Share on other sites

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

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

 

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

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

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

Share this post


Link to post
Share on other sites

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

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

Share this post


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

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

Это базовое

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

Share this post


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

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

Share this post


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

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

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

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

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

Share this post


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

Share this post


Link to post
Share on other sites
4 часа назад, chukcha сказал:

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

 

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

Share this post


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 - в нем же и делайте проверку на наличие нужных данных в БД и добавление их при отсутствии

Share this post


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

Share this post


Link to post
Share on other sites

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

Edited by Shureg

Share this post


Link to post
Share on other sites
4 часа назад, ampakine сказал:

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

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

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

Share this post


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 - имеют малую стоимость

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×

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.