Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

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


ampakine

Recommended Posts

День добрый.

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

Надіслати
Поділитися на інших сайтах


То есть: есть файл 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 ). 

Змінено користувачем ampakine
Надіслати
Поділитися на інших сайтах


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

Надіслати
Поділитися на інших сайтах

Да в том то и дело, что 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 !!!   Ей богу ну вот чем они мешали им?

Змінено користувачем ampakine
Надіслати
Поділитися на інших сайтах


 

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

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

 

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

Надіслати
Поділитися на інших сайтах

49 минут назад, ampakine сказал:

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

 

 

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

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

 

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

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

Лол.

Надіслати
Поділитися на інших сайтах

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

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

 

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

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

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

Надіслати
Поділитися на інших сайтах

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

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

Надіслати
Поділитися на інших сайтах

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

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

Это базовое

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

Надіслати
Поділитися на інших сайтах

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

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

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

Надіслати
Поділитися на інших сайтах

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

Надіслати
Поділитися на інших сайтах

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

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

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

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

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

Надіслати
Поділитися на інших сайтах

р

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, Не могли бы по подробнее пояснить как сделать что бы таблица все таки создавалась?

 

Змінено користувачем ampakine
Надіслати
Поділитися на інших сайтах


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

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

 

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

Надіслати
Поділитися на інших сайтах


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

Надіслати
Поділитися на інших сайтах

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

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

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

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

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

 

 

 

Змінено користувачем ampakine
Надіслати
Поділитися на інших сайтах


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

Змінено користувачем Shureg
Надіслати
Поділитися на інших сайтах


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

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

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

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

Надіслати
Поділитися на інших сайтах

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

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

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


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

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

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

 

 

 

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

Надіслати
Поділитися на інших сайтах

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.