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

Sha

Користувачі
  • Публікації

    1 050
  • З нами

  • Відвідування

Записи блогу, опубліковані користувачем Sha

  1. Sha
    Доброго дня!
    Останнiм часом раз-пораз з'являються дискусії на тему застаріння CMS OpenCart. Порушимо і тут цю тему, але не розкритикувати, чи похвалити, а пропонуючи!
     
    Як розгорнути проект з сучасним FrontEnd ми писали ранiше...
    Зараз-же розглянемо посібник з прикладами, де спробуємо подружити Element Plus та OpenCart модуль для адмiн панелi
    Створемо додаток "Управління категоріями OpenCart"
     
    1) Клієнтська частина
    ../upload/admin/view/template/extension/module/multi_categories.twig
    {{ header }} {{ column_left }} <div id="content"> <div class="page-header"> <div class="container-fluid"> <div class="pull-right"> <a href="{{ cancel }}" data-toggle="tooltip" title="{{ button_cancel }}" class="btn btn-default"><i class="fa fa-reply"></i></a> </div> <h1>{{ heading_title }}</h1> <ul class="breadcrumb"> {% for breadcrumb in breadcrumbs %} <li><a href="{{ breadcrumb.href }}">{{ breadcrumb.text }}</a></li> {% endfor %} </ul> </div> </div> <div class="container-fluid"> <div class="panel panel-default"> <div class="panel-heading"> <h3 class="panel-title"><i class="fa fa-pencil"></i> {{ breadcrumb_last }}</h3> </div> <div class="panel-body"> <div id="app"></div> </div> </div> </div> </div> <script type="module" crossorigin src="{{ base }}view/javascript/product_list.js"></script> <link rel="stylesheet" crossorigin href="{{ base }}view/javascript/product_list.css"> <style> html { height: auto } </style> {{ footer }}  
    2) Клієнтська частина source for Vue Element-plus
    ../src/App.vue
    <template> <el-tree style="max-width: 600px" :data="products" node-key="category_id" > <template #default="{ node, data }"> <span class="custom-tree-node"> <span>{{ data.sort_order }}) {{ node.label }}</span> <span> <a :href="openCategory(data)" target="_blank">_<i class="fa fa-pencil"></i></a> </span> </span> </template> </el-tree> </template> <script setup> import { onMounted, ref } from 'vue'; let productPath = ''; const products = ref({}); const openCategory = (data) => { return data.href.replaceAll('&amp;', '&'); } const appInit = (list = []) => { products.value = list; } const getProducts = async () => { if (!productPath) { console.debug('The error for determining the path to get data!'); } else { let response = await fetch( productPath ); appInit( await response.json() ); } } const appUrl = (route) => { // Sanitize the call route = route?.replace(/[^a-zA-Z0-9_\/]/i, '') || ''; if (!route) return ''; // production or development (variable set: in root on .env.development file) const inputUrl = new URL( import.meta.env.PROD ? document?.location?.href : import.meta.env.VITE_APP_HOME_PATH ); inputUrl?.searchParams?.set('route', route); return inputUrl?.href || ''; } onMounted(() => { productPath = appUrl( 'extension/module/multi_categories/get_categories' ); getProducts(); }) </script> <style> .custom-tree-node { align-items: center; column-gap: 9px; display: flex; flex: 1; justify-content: space-between } </style>  
    3) Контроллер
    ../upload/admin/controller/extension/module/multi_categories.php
    <?php // Read more: https://opencartforum.com/files/developer/678008-sha class ControllerExtensionModuleMultiCategories extends Controller { private $error = []; private $edit_link = ''; public function index() { $this->load->language('extension/module/multi_categories'); $this->document->setTitle( $this->language->get('heading_title') ); $this->getForm(); } protected function getForm() { $data = []; $data['header'] = $this->load->controller('common/header'); $data['column_left'] = $this->load->controller('common/column_left'); $data['footer'] = $this->load->controller('common/footer'); $this->response->setOutput($this->load->view('extension/module/multi_categories', $data)); } public function get_categories() { $this->response->addHeader('Content-Type: application/json'); if (!$this->validate()) $this->response->setOutput([]); $this->load->model('extension/module/multi_categories'); $categories = $this->model_extension_module_multi_categories->get_categories(); $this->edit_link = $this->url->link( 'catalog/category/edit', 'user_token=' . $this->session->data['user_token'], true ); $this->response->setOutput(json_encode( $this->tree( $categories ) )); } private function tree($list, $parent_id = 0) { $children_list = []; foreach ($list as $item) { if ((int)$parent_id !== (int)$item['parent_id']) continue; $item['children'] = $this->tree( $list, $item['category_id'] ); $children_list[] = $this->itemBuild( $item ); } return $children_list; } private function itemBuild($data = []) { $data['label'] = strip_tags(html_entity_decode( $data['name'], ENT_QUOTES, 'UTF-8' )); $data['href'] = $this->edit_link . '&amp;category_id=' . $data['category_id']; return $data; } private function validate() { if (!$this->user->hasPermission('access', 'extension/module/multi_categories')) { $this->error['warning'] = $this->language->get('error_permission'); } return !$this->error; } }  
    4) Модель
    ../upload/admin/model/extension/module/multi_categories.php
    <?php // Read more: https://opencartforum.com/files/developer/678008-sha class ModelExtensionModuleMultiCategories extends Model { public function get_categories() { $query = $this->db->query("SELECT cd.name, c.category_id, c.parent_id, c.sort_order FROM " . DB_PREFIX . "category c LEFT JOIN " . DB_PREFIX . "category_description cd ON (c.category_id = cd.category_id) WHERE cd.language_id = '" . (int)$this->config->get('config_language_id') . "' ORDER BY c.parent_id, c.sort_order, cd.name;"); return isset($query->num_rows) ? $query->rows : []; } }  
    5) Мова
    ../upload/admin/language/en-gb/extension/module/multi_categories.php
    <?php // Heading $_['heading_title'] = 'Categories';  
    Сучасні бібліотеки та фреймворки пропонують широкий вибір готового функціоналу, наприклад, ви легко можете додати можливість перетягування елементів
    <el-tree ... draggable ... > //... </el-tree> та події 
    <el-tree @node-drag-start="dragStart" @node-drag-enter="dragEnter" @node-drag-leave="dragLeave" @node-drag-over="dragOver" @node-drag-end="dragEnd" @node-drop="drop" > // ... </el-tree> та з легкістю створити модуль зручного сортування дерева категорій перетягуванням OpenCart методом "Drag and Drop".
    А з нашими прикладами ще й безкоштовно!!!
     
    Дякуємо, за прочитання! 
    Тут ви зможете знайти наші модулі, та щє-й зі знижкою!)
    якщо використаєте купон 678008-30
     
    Ось що вийшло
     

     
                                  Скачати готовий модуль!
     
     
    пропозиції та оцiнка вітаються!)
  2. Sha

    useful
    Полезное:
         1) Рефакторинг и Паттерны проектирования
     
        Безопасность:
         1) Проверка подлинности модуля или шаблона.
     
        Самоорганизация:
    Доска задач Wakatime -  удобный тайм-трекер для разработчиков  
         Шпаргалки:
         2) Могу ли я использовать.
         5) Шпоры: https://www.cssportal.com @Tom
         6) В помощь работы с ocmod: @Tom
             - https://github.com/opencart/opencart/wiki/Modification-System
             - http://dyisol.com/vqmod-to-ocmod-conversion-tool.php
     
     
         Сервисы:
         1) Конструктор и библиотека регулярок.
         2) Оффлайн шпаргалка по регуляркам.
     
        Оптимизация:
         1) Сжатие изображений.
     
        Разное:
         1) https://github.com/
         2) https://bitbucket.org/
         3) Минифицированные файлы: https://www.10bestdesign.com/dirtymarkup/ @Tom
         5) Fetch: https://github.github.io/fetch/ @pimur
         6) JS: https://github.com/ryanmcdermott/clean-code-javascript, https://github.com/lydiahallie/javascript-questions @pimur
         7) Юникод: https://unicode-table.com/ru/ @pimur
         8) CSS Sprite Generator: https://spritegen.website-performance.org/ @pimur
     
        Технологии:
        1) Таблицы bootstrap: https://datatables.net @Tom
     
        Ресурсы:
    Иконки Free: https://icon-icons.com/ru/ @Tom Сервис хранения изображений: https://piccy.info  (Позволяет вставлять на форум прямую ссылку на изображение, без необходимости грузить картинки на форум) @Tom Прелоадеры @Tom  
    To be continued!
  3. Sha
    Повна документацiя на офiцiйному сайтi. [EN]
     
    1) Нам потрiбно завантажити та встановити Node.js
    2) Перейти до консолi
    3) Зазвичай він використовується у зв'язку з якимось проектом, наприклад Vite, або PrimeVue
    4) В консолi ввести:
    npm install -D tailwindcss postcss autoprefixer
     
    5) Згенерувати конфігураційні файли, пишемо
    npx tailwindcss init -p
    Ось вони:

     
    6) Тепер нам потрiбно вiдкрити до редагування файл tailwind.config.js, та внести ось такi змiни
    "./index.html", "./src/**/*.{vue,js,ts,jsx,tsx}"
     
    7) Далi вiдкрити файл style.css, та додати ось такi змiни
    @tailwind base; @tailwind components; @tailwind utilities;
     
    8) Якщо ви вперше розгортаєте проект, вам може знадобиться пiдтянути залежностi
    npm i  
    9) Останнiй шаг це запуск проекту!
    npm run dev В мене вийшло!)

     
    Як пiдключити tailwind до OpenCart робочого проекту , за допомогою CDN? (офiцiйний сайт)
    Нашi проекти!
     

  4. Sha
    Якщо на комп'ютерi ще не встановлено node.js його потрiбно завантажити з офсайту та встановити як звичайний додаток.
     

     
    Короткий посібник:
     
    1) Спершу потрiбно вiдкрити консоль, та перейти до проекту 

    наприклад, cd D:\xampp\htdocs\www\multiedit-pro\
     
    2) Переходимо до розгорнування проекту,
    вводимо в консолi: npm create vite@latest

      
    3) Назва проекту:
    Якщо на цьому етапi ви розгортаєте новий чистий проект, то можна вказати його назву.
    Але в нашому випадку, для роботи поряд з CMS OpenCart замiсть назви, потрiбно поставити крапку

     
    тодi з'явиться запитання, i вам потрiбно буде: 
    3) Обрати Ignore files and continue, щоб залишити вже iснуючi файли.
    4) Обрати шаблон

    я обираю Vue.
     
    5) Обрати налаштування

    наприклад JavaScript
     
    Готово!

     
    6) Для подальшої роботи підтягуємо залежнi модулi
    npm i

    ...тут буде багато iнфи)
     
    А ось i результат:

     
    Проект створили, та рушiй ocStore не зачепили! (Вiн знаходиться в папцi upload).
     
    А тепер можна й подивитись на результат, та отримати крапельку дофаміну: npm run dev, або npm run preview!
     
    Офiцiйний сайт Vite!

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

Important Information

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