Поддержка Проблемы и решения Интеграция своей БД с БД WordPress

  • Решено Dmitry Kohan

    (@dmay1989)


    Подскажите, пожалуйста, при интеграции своей существующей базы данных с базой данных WordPress лучше воспользоваться функцией dbDelta() и создавать свои собственные таблицы в базе данных WordPress или же создавать новые поля в уже существующих таблицах WordPress, таких как — posts, usermeta ?

    Для понимания процесса поясню — может быть вопрос покажется непонятным (тогда поправьте меня), но это мой первый проект на WordPress и с использованием CMS в принципе и суть его такова: пользователи, зарегистрировавшись в системе, через формы вводят исходные числовые и текстовые данные (4-6 параметров) и далее система на основе заранее созданных формул вычисляет результат и сохраняет его в базу данных по каждому пользователю, необходимо также предусмотреть вывод результатов по каждому пользователю в личном кабинете.
    Так же как и для исходных данных, вопрос и по результатам вычислений — результаты лучше сохранять в новых полях существующих таблиц WordPress (posts, usermeta) или же в созданных при помощи функции dbDelta() собственных таблицах ? Наведите на мысль, пожалуйста, как правильно начать реализовывать проект.

    Буду очень благодарен за любую консультацию

Просмотр 15 ответов — с 1 по 15 (всего 39)
  • необходимо также предусмотреть вывод результатов по каждому пользователю в личном кабинете.

    это вы кому адресовали?

    • В зависимости от вашей Структуры вашей Затеи, целесообразно либо использовать существующие Таблицы в существующей DB, либо создать и использовать новые Таблицы в существующей DB.
    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    создавать новые поля в уже существующих таблицах WordPress, таких как — posts, usermeta

    Таблица usermeta в общем случае подходит для хранения любых данных о пользователе, создавать в ней новые поля нет необходимости.

    @wpgear , упоминая про личный кабинет я просто конкретизировал суть проекта.

    <p>В зависимости от вашей Структуры вашей Затеи, целесообразно либо использовать существующие Таблицы в существующей DB, либо создать и использовать новые Таблицы в существующей DB.</p>

    То есть либо создавать свои собственные новые таблицы, либо использовать существующие таблицы в существующей DB без какого-либо добавления в них новых полей (и таким образом, структуру исходных таблиц базы данных WP не редактировать) ? Я правильно понял?

    структуру исходных таблиц базы данных WP не редактировать

    Совершенно верно.
    И если вы сформулируете хотя бы в общих словах Цели и Возможности вашего ЛК, то можно будет надеяться на получение разумных советов.

    И если вы сформулируете хотя бы в общих словах Цели и Возможности вашего ЛК, то можно будет надеяться на получение разумных советов.

    @wpgear , помимо целей и возможностей — ниже также сформулировал приблизительные входные и выходные данные:

      Цели:

    • предоставить пользователям доступ к расчетной системе (круг пользователей ограничен)
    • предоставить пользователям возможность вводить определенные данные в расчетную систему и получать на их основе необходимые расчетные данные
      Возможности:

    • ввод необходимых данных для расчета
    • сохранение введенных данных в базе данных
    • определение расчетных параметров на основе исходных данных
    • отправка введённых данных и результата расчета на согласование
    • просмотр архива с данными
      Входные данные:

    • логин/пароль пользователя
    • ФИО
    • e-mail
    • № телефона
    • адрес
    • период расчета
    • вид населенного пункта
    • наименование населенного пункта
    • показатели a,b,c,d,e
    • Каждый пользователь обладает определенным набором прав доступа к данным (первая категория пользователей: только просмотр всей ветки; вторая категория: просмотр и редактирование определенной области ветки)
    • Каждый пользователь относится к определённой организации — на основе принадлежности к той или иной организации определяется уровень доступа к данным
    • существует третья главная категория пользователей, одобряющая или отклоняющая введенные данные первой категорией пользователей
      Выходные данные

    • расчетные показатели f1,f2,fn на основе введенных a,b,c,d,e

    Буду очень признателен за любой совет и комментарий

    Для Хранения всего перечисленного идеально подходит Таблица usermeta, о чем вам сказал sergeybiryukov
    Для Управления с распределением Прав Доступа, можно попробовать некоторые Плагины, типа Ultimate Members или WP-Recall
    Но скорее всего, учитывая ваши хотелки, проще написать свой Плагин, добавив пару собственных Таблиц.

    Если 4-6 параметров — то wp_usermeta для хранения вполне подойдет.
    А вывести в существующий ЛК — не сложно.
    Оформляете функцию в шорткод (в которой получаете нужные значения) и в произвольной вкладке, WP-Recall например, вписываете этот шорткод.

    Функционал произвольных вкладок позволяет вписать переменную в шорткод — она передает id владельца кабинета

    {MASTERID} — выводит идентификатор хозяина текущего личного кабинета

    . Дока

    Но скорее всего, учитывая ваши хотелки, проще написать свой Плагин, добавив пару собственных Таблиц.

    @wpgear , сейчас в моей базе 8 таблиц:

    1. Пользователи
    2. Организации (каждый пользователь принадлежит определенной организации)
    3. Типы организаций (каждая организация имеет свой тип и данный тип определяет категорию доступа к данным отчетов)
    4. Населенные пункты (каждая организация принадлежит определенному населенному пункту)
    5. Типы насел. пунктов (каждый насел. пункт имеет свой тип)
    6. Регионы (каждая организация находится в определенном регионе)
    7. Отчеты ( @otshelnik-fm , именно сюда и сохраняются те 4-6 параметров, о которых я упоминал выше)
    8. Типы отчетов (каждая организация на основе своего типа имеет доступ к определенным типам отчетов)

    Правильно ли я понимаю —

    1. поля таблицы Пользователи(фамилия, имя, отчество, должность, идентификатор организации как внешний ключ) вписываются для хранения в таблицу usermeta ?
    2. Можно ли таблицы Организации Типы организаций Населенные пункты Типы насел. пунктов Регионы вписать для хранения в таблицы terms termmeta и term_taxonomy в качестве таксономий или же нужно создавать свои собственные таблицы ?
    3. В таблице Отчеты хранятся идентификаторы пользователя, насел. пункта, id типа отчета и 4-6 параметров, вводимых пользователем в форму + расчетный параметр — для таблицы Отчеты наверное нужно точно создавать свою таблицу ?

    Поправьте, пожалуйста, наверняка я где-то ошибаюсь
    Заранее благодарен за любые советы

    Заранее благодарен за любые советы

    Если вы все это реализуете, оформите пожалуйста как отдельный плагин. Пускай даже платный, думаю этому будут многие рады.
    Если же решитесь на условна бесплатный (в лайт версии с порезанным функционалом) или даже полностью бесплатным, то он очень быстро наберет большую популярность.

    Правильно ли я понимаю

    Очень хорошо.

    Скорее всего: «Типы организаций», «Типы насел. пунктов», «Типы отчетов» — они не будут иметь больших Списков, и не они будут часто обновляться.
    Поэтому, можно (но не обязательно) их перечислить в обычных Массивах.

    Поэтому, можно (но не обязательно) «Типы организаций», «Типы насел. пунктов», «Типы отчетов» перечислить в обычных Массивах

    @wpgear , спасибо за комментарии, но осталась одна неясность — большие по объему таблицу Организации и таблицу Населенные пункты вписывать для хранения в таблицы terms, termmeta и term_taxonomy в качестве таксономий (и затем привязывать к пользователям и отчетам в качестве той или иной категории) или же лучше не извращаться и создавать для организаций и населенных пунктов собственные таблицы ?

    таксономии имеют готовые механизмы для удобной работы с ними.
    Поэтому, в зависимости от масштабов вашего Проекта и ваших Амбиций, возможны Варианты, каждый из которых вполне хороший.
    Пользовательские Таксономии — могут быть компромиссом.
    Но возможно, что вы захотите, чтобы все в вашей Админке имело единый Интерфейс в плане Навигации и Управления. (однако, это можно будет решать уже в более поздних Версиях, если не сойдете с дистанции)

    Если вывести резюме из всей темы, то можно сформулировать следующее:

    • Целесообразно либо использовать существующие Таблицы в исходной DB WorpPress, либо создавать и использовать новые Таблицы в исходной DB WordPress при помощи функции dbDelta(), и, таким образом, структуру исходных таблиц базы данных WP НЕ РЕДАКТИРОВАТЬ
    • Таблица usermeta идеально подходит для хранения любых данных о пользователе, создавать в ней новые поля нет необходимости (также как и нет необходимости править структуру любой другой исходной таблицы DB WordPress)
    • Для хранения небольших списков данных (например, «Типы организаций», «Типы насел. пунктов», «Типы отчетов») можно как создавать собственные таблицы в DB WordPress, а можно и перечислить их в обычных Массивах без создания таблиц в DB
    • Для хранения больших списков данных (например, «Организации», «Насел. пункты») нужно либо создавать собственные таблицы в DB WordPress, либо использовать Пользовательские Таксономии и соответственно хранить всю информацию данных списков в таблицах terms, termmeta и term_taxonomy
    • Для Управления с распределением Прав Доступа между пользователями, можно попробовать некоторые Плагины, например Ultimate Members или WP-Recall, но проще будет написать свой Плагин, добавив пару собственных Таблиц
    • оформить всё вышесказанное вообще в отдельный плагин, который при активации будет вносить все изменения в DB и создавать необходимые таблицы, и далее данный плагин будет выполнять остальной функционал — управление с распределением прав доступа между пользователями, ввод данных пользователем в формы, расчеты, сохранение данных в DB, отображение личного кабинета пользователя и прочее

    @wpgear , поправьте, пожалуйста, если я где-то ошибся и спасибо огромное за помощь.
    p.s. еще не совсем понял, что Вы имели ввиду под этой фразой (видимо эта фраза как-то связано с использованием либо пользовательских таксономий, либо собственных таблиц в структуре DB) :

    Но возможно, что вы захотите, чтобы все в вашей Админке имело единый Интерфейс в плане Навигации и Управления. (однако, это можно будет решать уже в более поздних Версиях)

    но проще будет написать свой Плагин, добавив пару собственных Таблиц

    смотря что вы считаете должно быть в ЛК.

    В готовых ЛК масса уже готового функционала — который включается по необходимости. У реколл это оформлено в виде дополнений.
    Готовый ЛК сэкономит вам время — т.к. останется только вывести вашу табличку и не думать о профилях, вкладках, полях профиля, форме регистрации и логина…

    Но возможно, что вы захотите, чтобы все в вашей Админке имело единый Интерфейс в плане Навигации и Управления.

    Если вы решитесь на создание собственного Плагина, то у вас будет своя Админка для него. В которой, можно будет настраивать, редактировать все ваши Организации, Населенные пункты и всевозможные их Типы.
    Для этого у вас должны быть предусмотрены необходимые элементы управления и должен быть обеспечен вывод этих Записей, их Поиск и Сортировка.
    В конченом счете, вы каким-то образом все это оформите, следуя собственным предпочтениям и полагаясь на собственный вкус или его отсутствие.

    Ну и вот.

    А Таксономии — они уже имеют вполне определенный Механизм, в стиле и концепции WP.
    И если ваш Интерфейс будет сильно отличаться от WP-Интерфейса, то — это будет заметно.
    Однако, для Прототипа — это не принципиально. Лишь бы заработало.

Просмотр 15 ответов — с 1 по 15 (всего 39)