Как добавить новое поле в базу opencart без доступа к SQL серверу ?!!

ALarik

ALarik

expert
#1
Здравствуйте, други и подруги !
Претендовать на открытие и соотв. патент изобретения не буду, но создам тему, которая поможет, по крайней мере, мне самому, не искать или писать с "0", а открыть и просто скопипастить код.
Итак, задача в ТЗ такова:
Выводить иконку категории в горизонтальном меню для родительских категорий.
Самым оптимальныйм решением, было бы прописать иконки под category_id в контроллере меню, НО, мы не говнокодеры и костыли не применяем, + учитываем тот момент, что завтра, клиент захочет самостоятельно поменять иконки или добавить новый родительский элемент с новой иконкой, а мы - как прогеры уровня "гуру" должны (от слова ДОЛГ) поставить все на автоматику и минимальную зависимость от масштабирования.
После согласования пункта с заказчиком, было принято следующее решение:
Добавить дополнительное поле, в таблицу категории, с названием menu_icon, в которое и будем вносить путь рисунка, по аналогии с полем рисунка категории image.
Но, есть одна проблема: "клиент отказывается дать доступ к SQL серверу, в связи с параноидальным отношением к миру, отсутствием репутации моей или ещё по какой то непонятной для меня причины, использовать же adminer или его аналоги я не предпочитаю, для таких задач, посему вот мое решение:
PHP:
$this->db->query( "ALTER TABLE  " . DB_PREFIX . "category ADD `menu_icon` varchar(255) DEFAULT NULL AFTER `image`" );
где мы альтеруем таблицу категории, добавляя после поля `image` - необходимое нам поле с параметрами: `menu_icon` varchar(255) DEFAULT NULL
далее вся магия как бы по теме исчерпана, данный код вставить однократно в нужном контроллере, один раз вызвать и удалить строку.

UPD: Обновление
Так же набросал код при динамической проверке наличия поля в конкретной таблице, мож. кому то пригодится:
PHP:
$give_me_colum = $this->db->query("SHOW COLUMNS FROM `" . DB_PREFIX . "category` LIKE 'menu_icon'");
if (!$give_me_colum->num_rows) {
    $this->db->query("ALTER TABLE `" . DB_PREFIX . "category` ADD COLUMN `menu_icon` varchar(255) DEFAULT NULL AFTER `image`");  
}
Приятного пользования и хорошего кода !
 
Останнє редагування:
S

SlaSoft

Maestro
#2
То что он не дает - его право.
С первого кода, я чуть со стула не упал! Как!!!

второй код - меня попустило :)

Код:
 $give_me_colum = $this->db->query("SHOW COLUMNS FROM `" . DB_PREFIX . "category` WHERE Field = 'menu_icon'");
if (!$give_me_colum->num_rows) {
    $this->db->query("ALTER TABLE `" . DB_PREFIX . "category` ADD COLUMN `menu_icon` varchar(255) DEFAULT NULL`");
}
Здесь нет никакой оптимизации кода, просто мне так нравится. Некто @Baco , говорит, что Like медленный. Но на одной транзакции это не страшно


Не имеет значения в какое место, будет вставлено, всегда предпочитаю, не портить изначльный порядок

В тройке, такой код можно выполнять при инстале модуля. Я предпочитаю модулем, мало ли.. понадобится еще какая дополнительная фишка, например размеры иконки, или превращение ее в data:ur или...


Или писать специально модификатор, который потом смело можно удалить, после добавления
например
search index()
add - код проверки с создания
Т.е. установили, обновили, запустили, удалили, обновили
 
OP
ALarik

ALarik

expert
Thread Starter #3
@SlaSoft, тут каждый кодит как горазд, мой же пример - не самый идеальный вариант, и конечно под стандарт не подпадает, но дано как пример, для экспресс добавления\проверки наличия поля и альтерирования в него новой колонки, ни больше, ни меньше, (0)скопипастил-->(1)подредактировал-->(2)выполнил-->(3)удалил... макс 15 сек и готово, а сколько времени занимает эта операция через модуль ?
"время - наше все, сказал фрилансер, автоматически зажимая Ctrl + S"
 
S

SlaSoft

Maestro
#4
Я много делаю, именно через модули
1. Это архив знаний и опыта
2. Это удобство управления в дальнейшем



3. Иногда специально пишу технический контроллер для таких вещей
Забросил, вызвал, удалил
 
Зверху