Яндекс.Метрика
qr-код - Как-то так стрелка - Как-то так
Ведущий экономист + ... пиктограмма - Как-то Так THIS     Экономическая грамотность и web-решения
Всё по теме: что, как и почему. Актуальные вещи - своими словами.
Повышайте своё качество WITH ME - СПЭМ !
Если тебе не нравится то, что ты получаешь, измени то, что ты даешь. © Карлос Кастанеда     KAKTOTAK.BY - услуги по экономическому проектированию и web-разработке (php/js - telegram, WordPress, Laravel, Vue, SEO)    Кооперация - на постоянной основе    Будь в теме   -    ПОДПИШИСЬ      Мои заметки - ЭКОНОМИКА +  и  Справочник WEB-разработчика | php+js+seo   в Telegram   telegram  

Создание плагина для WordPress: Vue 3 и Ant Design для динамического отображения данных

Создание плагина для WordPress: Vue 3 и Ant Design для динамического отображения данных

Для понимания процесса разработки плагина на популярном движке WordPress совместно с JS фреймворком Vue 3 (composition api синтаксис script setup) рассмотрим простой пример, где реализуем серверный вывод данных из базы данных MySQL на клиент в таблицу Ant Design (популярной библиотеки разработки пользовательских интерфейсов).

Так же предусмотрим асинхронный серверный функционал для поиска, сортировки и пагинации данных таблицы.

Подробно рассмотрим по шагам весь процесс решения данной задачи:.

Шаг 1: Установка необходимых инструментов

Перед тем как начать, убедимся, что у нас установлены следующие инструменты:

  • Node.js и npm: Если у нас их еще нет, скачаем и установим по официальной ссылке. npm устанавливается вместе с Node.js.
  • Vite: Это инструмент сборки, который позволяет быстро разрабатывать и компилировать Vue приложения. Мы установим его через npm.

Шаг 2: Создание структуры папок плагина

Создадим структуру папок для нашего плагина:

cd wp-content/plugins
mkdir my-custom-table-plugin
cd my-custom-table-plugin

Шаг 3: Создание основного PHP файла плагина

Создадим файл my-custom-table-plugin.php в этой папке:

<?php
/**
 * Plugin Name: My Custom Table Plugin
 * Description: Плагин для отображения таблицы из БД с использованием Vue 3 и Ant Design.
 * Version: 1.0
 * Author: Your Name
 */

// Защита от прямого доступа
if (!defined('ABSPATH')) {
    exit;
}

// Подключение скриптов и стилей
function my_custom_table_plugin_enqueue_scripts() {
    wp_enqueue_script('my-vue-app', plugins_url('/dist/main.js', __FILE__), ['wp-element'], '1.0', true);
    wp_enqueue_style('ant-design', 'https://cdnjs.cloudflare.com/ajax/libs/antd/4.18.5/antd.min.css');
}

add_action('wp_enqueue_scripts', 'my_custom_table_plugin_enqueue_scripts');

// Рендерим компонент
function my_custom_table_plugin_render() {
    return '<div id="my-vue-app"></div>';
}

add_shortcode('my_custom_table', 'my_custom_table_plugin_render');

Шаг 4: Инициализация проекта с Vite и Vue

В папке плагина (где мы создали my-custom-table-plugin), инициализируем проект с помощью Vite:

npm init vite@latest client --template vue

Это создаст новую папку client с шаблоном Vue.

Перейдиём в папку client:

cd client

Установим зависимости:

npm install

Установим Ant Design Vue:

npm install ant-design-vue

Шаг 5: Настройка Vite

Теперь нам нужно настроить Vite для правильной сборки.

Откроем файл vite.config.js в папке client и изменим его следующим образом:

import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
import { resolve } from 'path';

export default defineConfig({
    plugins: [vue()],
    build: {
        outDir: resolve(__dirname, '../dist'), // Компилируем в ../dist
        emptyOutDir: true,
        rollupOptions: {
            input: {
                main: resolve(__dirname, 'index.html'),
            },
        },
    },
});

Шаг 6: Создание Vue компонента

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

В папке client/src/components/ создадим файл TableComponent.vue и добавим следующий код:

<template>
  <a-table
    :data-source="data"
    :pagination="pagination"
    :loading="loading"
    :columns="columns"
    @change="handleChange"
  />
</template>

<script setup>
import { ref, onMounted } from 'vue';
import { Table } from 'ant-design-vue';

const data = ref([]);
const loading = ref(true);
const pagination = ref({
  current: 1,
  pageSize: 10,
  total: 0,
});

const columns = [
  {
    title: 'Имя',
    dataIndex: 'name',
    sorter: true,
  },
  {
    title: 'Возраст',
    dataIndex: 'age',
    sorter: true,
  },
  {
    title: 'Город',
    dataIndex: 'city',
  },
];

const fetchData = async () => {
  loading.value = true;
  const response = await fetch(`/wp-json/myplugin/v1/data?page=${pagination.value.current}&pageSize=${pagination.value.pageSize}`);
  const result = await response.json();
  data.value = result.data;
  pagination.value.total = result.total;
  loading.value = false;
};

const handleChange = (pagination) => {
  pagination.value.current = pagination.current;
  fetchData();
};

onMounted(() => {
  fetchData();
});
</script>

Шаг 7: Инициализация нашего Vue приложения

Откроем файл main.js в папке client/src/ и импортируем новый компонент и библиотеки:

import { createApp } from 'vue';
import App from './App.vue';
import TableComponent from './components/TableComponent.vue';
import 'ant-design-vue/dist/antd.css';

const app = createApp(App);
app.component('TableComponent', TableComponent);
app.mount('#my-vue-app');

Шаг 8: Настройка REST API

В my-custom-table-plugin.php добавим код для обработки API запросов (по такому принципу создаются все API на стороне WordPress):

add_action('rest_api_init', function () {
    register_rest_route('myplugin/v1', '/data', [
        'methods' => 'GET',
        'callback' => 'my_custom_table_api',
    ]);
});

function my_custom_table_api(WP_REST_Request $request) {
    global $wpdb;

    $page = $request->get_param('page') ?: 1;
    $page_size = $request->get_param('pageSize') ?: 10;

    $offset = ($page - 1) * $page_size;

    $results = $wpdb->get_results("SELECT name, age, city FROM your_table_name LIMIT $offset, $page_size");
    $total = $wpdb->get_var("SELECT COUNT(*) FROM your_table_name");
    
    return [
        'data' => $results,
        'total' => $total,
    ];
}

Не забудем заменить your_table_name на реальное название нашей таблицы в базе данных.

Шаг 9: Компиляция проекта

Теперь, когда все настроено, мы можем скомпилировать проект:

Перейдём в папку client и выполним команду для сборки проекта:

npm run build

Это создаст папку dist, которая будет содержать скомпилированные файлы нашего Vue приложения.

Шаг 10: Проверка в режиме разработки

Для работы в режиме разработки выполним команду в папке client:

npm run dev

Это стартует сервер Vite, и наше Vue приложение будет доступно по адресу http://localhost:3000 (порт может быть и другим).

Шаг 11: Проверка работы плагина

  • Активируем плагин через меню "Плагины" в админке WordPress.
  • Вставем шорткод [my_custom_table] в любой пост или страницу.
  • Обновим страницу и проверим таблицу.

Теперь при каждом обращении к /wp-json/myplugin/v1/data мы получаем данные из нашей базы данных, и данные будут отображаться в таблице Ant Design.

Наблюдение за изменениями в режиме разработки и в продакшене

Режим разработки:

При запуске npm run dev, мы работаем с локальным сервером Vite. Изменения в наших компонентах будут отображаться автоматически на странице, если мы сохраним (обновим) её.

Режим продакшена:

При компиляции проекта с помощью npm run build, все наши изменения будут собраны в папке dist. После этого обновим наш плагин в WordPress, чтобы использовать новые версии JS и CSS. Можно просто обновить страницу сайта, где используется шорткод [my_custom_table], чтобы увидеть новые изменения.

Теперь наш плагин готов к использованию и отражению данных из нашей базы данных с помощью Vue и Ant Design!

Вот по такому принципу можно создавать полноценные многофункциональные SPA-приложения на базе Vue с использованием WordPress.

автор - Михаленко Р.
M R. Автор - kaktotak.by Специализация: финансово-экономическое проектирование - моделирование бизнеса, инвестиционных проектов реального сектора, анализ и оценка эффективности, оптимизация системы управленческих решений.

Широкий спектр web-компетенций для решения задач бизнеса.

Подписывайтесь на мой телеграмм канал - Мои заметки - ЭКОНОМИКА +
Там я ничего не втюхиваю и не навязываю. Просто делюсь полезной информацией по экономической грамотности. Повышайте своё качество вместе со мной: что, как и почему в экономике на простом языке. Понятия, алгоритмы, процессы, микро- и макроаспекты и многое другое. Может, будет интересно !

А так же - Справочник WEB-разработчика | php+js+seo
Заметки и нативные решения простых локальных задач на PHP, JS. Кое-что про Laravel, WordPress, Vue и SEO.

  Персональная помощь в экономическом проектировании и веб-разработке:

  • Финансово-экономическое моделирование, анализ, учёт, бизнес-планирование
  • Комплексная web-разработка/поддержка проекта в сети (php/js, seo – Laravel, WordPress, Vue, telegram, администрирование, контент, реклама в Яндекс Директ

  telegram или форма обратной связи

Administrator
306

Конвертер валют
RUB RUB-icon
USD USD-icon
EUR EUR-icon
CNY CNY-icon
BYN BYN-icon
UAH UAH-icon
KZT KZT-icon
SHORT - о чём речь
ЭКОНОМИЧЕСКАЯ ГРАМОТНОСТЬ
Хочу Всё Знать. Полезные Советы