Сторінка 3 - Ihor Vansach
- 2 хв читання
У розділі ми пояснили, як налаштувати та розмежувати права доступу для користувачів адміністративної панелі Magento 2. У цій статті ви дізнаєтеся, як створювати власні правила доступу (Ресурси ролей).
Вам потрібно створити файл ACL (ACL - Список контролю доступу) у папці :
etc/acl.xml
додайте туди наступний код:
<?xml version="1.0"?><config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Acl/etc/acl.xsd"> <acl> <resources> <resource id="Magento_Backend::admin"> <resource id="Magento_Backend::content"> <resource id="VendorName_ModuleName::key1" title="Title 1" sortOrder="10"> <resource id="VendorName_ModuleName::key2" title="Title 2" sortOrder="10" /> </resource> </resource> <resource id="Magento_Backend::stores"> <resource id="Magento_Backend::stores_settings">ihor
- 2 хв читання
Щоб знайти сторінку конфігурації Magento 2, перейдіть до Панель адміністратора Magento 2 > Магазини > Конфігурація.
Усі вкладки та форми на цій сторінці налаштовано за допомогою цього файлу
etc/adminhtml/system.xml
, який містить більшість .
Додайте наступний код до файлу system.xml у вашому модулі, щоб створити власний розділ:
<?xml version="1.0"?><config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Config:etc/system_file.xsd"> <system> <tab id="tab_id" translate="label" sortOrder="110"> <label>My Tab</label> </tab> <section id="section_id" translate="label" type="text" sortOrder="1" showInDefault="1" showInWebsite="1" showInStore="1"> <class>separator-top</class> <label>My Section</label> <tab>tab_id</tab> <resource>VendorName_ModuleName::acl_path</resource> <group id="group_id" translate="label" type="text"ihor
- 4 хв читання
Щоб додати нову таблицю до бази даних Magento 2, потрібно створити файл у папці :
app/code/<VendorName>/<ModuleName>/Setup/InstallSchema.php
додайте до нього наступний код:
<?php
namespace VendorName\ModuleName\Setup;
use Magento\Framework\Setup\InstallSchemaInterface;use Magento\Framework\Setup\ModuleContextInterface;use Magento\Framework\Setup\SchemaSetupInterface;use Magento\Framework\DB\Adapter\AdapterInterface;
class InstallSchema implements InstallSchemaInterface{ public function install(SchemaSetupInterface $setup, ModuleContextInterface $context) { $installer = $setup; $installer->startSetup();
//new table script will be there
$installer->endSetup(); }}
InstallSchema.php — це файл, який відповідає за зміну структури бази даних під час встановлення модулів. Під час виконання команди CLI php bin/magento setup:upgrade Magento 2 перевіряє, чи з'явився новий модуль у системі та чи містить він файл InstallSchema.php. Якщо такihor
- 3 хв читання
Оскільки ви вже знаєте, як та як відображати текст "Hello World" на вашій власній сторінці, у цій статті ми покажемо вам, як відобразити його в новому блоці.
1. Додайте новий блок класу PHP.
Створіть цей файл:
app/code/<VendorName>/<ModuleName>/Block/SomeName.php
та додайте до нього наступний код:
<?php
namespace VendorName\ModuleName\Block;
class SomeName extends \Magento\Framework\View\Element\Template{ public function getWelcomeText() { return 'Hello World'; }}
де
SomeName – це випадкова назва у форматі CamelCase . \Magento\Framework\View\Element\Template – клас, від якого ви успадковуєте власний блок, що взаємодіє з шаблоном. getWelcomeText — публічний метод, який ми створили для повернення тексту "Hello World". Ви можете створити для нього назву самостійно.
2. Додайте файл шаблону (файл шаблону .phtml)
Створіть цей файл:
app/code/<VendorName>/<ModuleName>/view/frontend/templates/some-name.phtml
та додайте туди наступний код:
<h1><?php echo $block->escapeHtml($block->getWelcomeText())ihor
- 2 хв читання
Щоб відобразити "Hello World" на вашій власній сторінці в Magento 2, виконайте такі дії:
1. Зареєструйте маршрутизатор для вітрини.
Створіть цей файл:
app/code/<VendorName>/<ModuleName>/etc/frontend/routes.xml
та додайте туди наступний код:
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:App/etc/routes.xsd"> <router id="standard"> <route id="VendorName_ModuleName" frontName="path"> <module name="VendorName_ModuleName" /> </route> </router></config>
Ви можете використовувати ім'я розробника (VendorName), пов'язане з назвою модуля (ModuleName), як ідентифікатор маршрутизатора . frontName використовується в URL-адресі для доступу до ваших контролерів.
Обидва імені мають бути унікальними.
2. Створіть контролер.
Додайте новий файл:
app/code/<VendorName>/<ModuleName>/Controller/Index/Index.php
додайте в нього наступний код:
<?php
namespace VendorName\ModuleName\Controller\Index;ihor
- 2 хв читання
Щоб створити Basic модуль Magento 2 , вам потрібно лише 2 файли: module.xml та registration.php.
1. Спочатку створіть :
app/code/<VendorName>/<ModuleName>/
та папку, яка міститиме файли конфігурації модуля:
app/code/<VendorName>/<ModuleName>/etc/
Якщо папка app/code відсутня у вашій інсталяції Magento 2, створіть її.
2. Помістіть файл module.xml з наступним вмістом у папку app/code/ / /etc/ папка
<?xml version="1.0"?><config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd"> <module name="VendorName_ModuleName" setup_version="2.0.0"> <sequence> <module name="Magento_Cms"/> <module name="Magento_Catalog"/> </sequence> </module></config>
послідовність не є обов'язковим елементом і призначена для визначення модулів, від яких залежить ваш модуль. Якщо залежності невідомі, їх можна вказати пізніше. setup_version — визначає поточну версію модуля.
3. Створітьihor
- 1 хв читання
Як ви, можливо, знаєте, розширення від Magefan було інтегровано в ядро Magento 2.4.0, і ми передали авторські права на розширення " Login as Customer " компанії Adobe. Більше про це ви можете прочитати у статті про .
Отже, якщо ви використовуєте Magento 2.4.x або вище, у вас є 2 варіанти:
1. та використовувати основний вхід Magento як клієнт
2. Вимкніть основний вхід як клієнт та продовжуйте використовувати оригінальний вхід Magefan як клієнт.
Щоб вимкнути основні модулі, ви можете виконати ці команди:
bin/magento module:disable Magento_LoginAsCustomerbin/magento module:disable Magento_LoginAsCustomerAdminUibin/magento module:disable Magento_LoginAsCustomerApibin/magento module:disable Magento_LoginAsCustomerAssistancebin/magento module:disable Magento_LoginAsCustomerFrontendUibin/magento module:disable Magento_LoginAsCustomerLogbin/magento module:disable Magento_LoginAsCustomerPageCachebin/magento module:disable Magento_LoginAsCustomerQuotebin/magento module:disable Magento_LoginAsCustomerSalesihor
- 1 хв читання
Цього року Magefan пишається тим, що є серед срібних спонсорів онлайн-конференції MageCONF, яка відбудеться 24 жовтня 2020 року.
Mageconf 2020 – це обов’язкова для відвідування онлайн-конференція , яка дозволить вам зануритися у світ унікального спільного досвіду, представленого експертними агентствами Magento, постачальниками послуг та розробниками, дізнатися про останні тенденції та інновації електронної комерції.
Зареєструйтесь зараз безкоштовно. Не пропустіть!
- 1 хв читання
Якщо ви використовуєте одне з розширень Amasty, наприклад, Amasty Layered navigation, ви можете зіткнутися з проблемою непрацюючих зображень у блозі після завантаження.
Ми виявили проблему в розширеннях Amasty_Shopby , яка порушує роботу деяких інших розширень, що використовують функцію завантаження зображень, включаючи наше .
Amasty_Shopby у цьому файлі:
app/code/Amasty/Shopby/etc/adminhtml/di.xml
додає плагін до моделі Magento\Catalog\Model\ImageUploader .
Судячи з коду в наступному файлі:
app/code/Amasty/Shopby/Plugin/Catalog/Model/ImageUploaderPlugin.php
, схоже, що Amasty додав деяке виправлення для Magento 2.3.4. і проблема полягає в плагіні beforeMoveFileFromTmp.
Оригінальне оголошення Magento MoveFileFromTmp виглядає так:
public function moveFileFromTmp($imageName, $returnRelativePath = false)
і плагіну Amasty бракує другого параметра $returnRelativePath:
public function beforeMoveFileFromTmp(\Magento\Catalog\Model\ImageUploader $subject, $path)
Отже, по суті, плагін Amasty знищуєihor
- 1 хв читання
Якщо ви зіткнулися з неочікуваним перенаправленням 301 або 302 у Magento 2 і не знаєте, чому це відбувається або який код це викликає, ви можете легко виявити це, тимчасово відредагувавши такі файли:
/vendor/magento/framework/HTTP/PhpEnvironment/Response.php
/vendor/magento/framework/Controller/Result/Redirect.php
Відкрийте Response.php та додайте наступний рядок на початок функції setRedirect :
var_dump($url); \Magento\Framework\Debug::backtrace(false, true, false); exit();
Приклад:
public function setRedirect($url, $code = 302){
var_dump($url); \Magento\Framework\Debug::backtrace(false, true, false); exit(); $this->setHeader('Location', $url, true) ->setHttpResponseCode($code); return $this;}
Тепер відкрийте другий файл Redirect.php та додайте це:
var_dump($this->url); \Magento\Framework\Debug::backtrace(false, true, false); exit();
після кожного рядка, що містить:
$this->url =
Приклад:
public function setRefererUrl(){ $this->url = $this->redirect->getRefererUrl();ihor
- 1 хв читання
У Magento 2 трапляються ситуації, коли сторінка продовжує завантажуватися, а потім виникає фатальна помилка 500, обмеження пам'яті або помилка тайм-ауту. Це нескінченний цикл у коді PHP, коли один і той самий код виконується знову і знову. Це пов'язано з деякими основними проблемами Magento або, найімовірніше, зі стороннім розширенням.
Щоб налагодити нескінченний цикл і знайти вхід у цикл, виконайте наведені нижче дії.
1. Відкрийтеapp/bootstrap.phpфайл і додайте цей код одразу після тегу відкриття PHP <?php у наступному рядку
$_SERVER['MAGE_PROFILER'] = 'html';
2. Відкрийтепостачальник/magento/framework/Profiler.php файл і додайте цей код на початок "публічна статична функція start($timerName, масив $tags = null)функція, наприклад
private static $firsttime = null;
public static function start($timerName, array $tags = null){ if (!self::$firsttime) { self::$firsttime = time(); } if (time() - self::$firsttime > 10) { //10 - is seconds to wait \Magento\Framework\Debug::backtrace(falseihor
- 2 хв читання
Якщо ви працюєте з багатьма різними екземплярами Magento як з тимчасовим проектом, вам може знадобитися зручний метод для швидкої перевірки зворотного трасування виконання деяких функцій у Magento 2 без встановлення або ввімкнення додаткового програмного забезпечення на сервері, наприклад, Xdebug.
У цьому випадку ви можете використовувати рідну платформу Magento. функція backtrace з класу \Magento\Framework\Debug та викликайте її щоразу, коли вам потрібно:
\Magento\Framework\Debug::backtrace(false, true, false);
В результаті ви отримаєте цей гарний HTML-код debug-backtrace:
Ви також можете викликати функцію exit , щоб зупинити подальше виконання коду одразу після backtrace.
Ось більше інформації про метод backtrace:
/** * Prints or returns a backtrace * * @param bool $return return or print * @param bool $html output in HTML format * @param bool $withArgs add short arguments of methods * @return string|bool */ public static function backtrace($return = false, $html = true, $withArgs = true)ihor
- 3 хв читання
Безпека вашого інтернет-магазину та зменшення кількості помилок є одним із головних пріоритетів кожного продавця. Ви можете досягти цього, оновивши Magento та .
Це відносно просте завдання для досвідченого розробника. Але оновлення розширення в Magento може бути складним, якщо ви виконуєте його вперше. Тому важливо знати точні кроки, які вам потрібно виконати.
Примітка: інструкції з оновлення зазвичай залежать від методу, який використовується для .
Оновлення розширення в Magento через Composer
Якщо файли розширення знаходяться в папці vendor/company/module-name , тоді розширення було встановлено за допомогою composer . Тому вам потрібно виконати такі кроки:
1. Відкрийте CLI (інтерфейс командного рядка).
2. Перейдіть до кореневої папки Magento 2.
3. Виконайте такі команди:
composer remove company/module-namecomposer require company/module-name ^x.x.x# replace x.x.x with the version you want to usephp bin/magento setup:upgradephp bin/magento setup:di:compilephp bin/magento setup:static-content:deployihor
- 1 хв читання
Якщо ви використовуєте з доданими зображеннями до допису в блозі, але ці зображення не відображаються на вітрині магазину, то, найімовірніше, проблема у вашій темі. Багато тем пропонують власні макети блогів та файли шаблонів, які замінюють оригінальний вигляд і можуть не враховувати деякі функції блогу, такі як зображення. Щоб перевірити та виправити це, виконайте наведені нижче кроки:
1. Відкрийте цей файл, якщо він існує (якщо він не існує, пропустіть кроки 2-3):
/app/design/frontend/[ThemeVendor]/[themename]/Magefan_Blog/templates/post/list/item.phtml
2. Перевірте, чи файл містить код, наприклад "getFeaturedImage". Ви можете знайти оригінальний код тут
https://github.com/magefan/module-blog/blob/master/view/frontend/templates/post/list/item.phtmlhttps://prnt.sc/tcl3sj
3. Якщо цей код відсутній, додайте його до файлу вашої власної теми.
4. Відкрийте цей файл, якщо він існує (якщо не існує, пропустіть кроки 5-6):
/app/design/frontend/[ThemeVendor]/[themename]/Magefan_Blog/templates/post/view.phtmlihor
- 2 хв читання
«Сталася помилка обробки вашого запиту» – одне з найпоширеніших повідомлень, які ви можете отримати під час роботи з Magento 2. Ось приклад цього повідомлення:
Які найпоширеніші причини появи повідомлення «Сталася помилка обробки вашого запиту»?
Встановлення нової теми або розширення Magento 2.
Оновлення Magento 2 або розширення Magento 2.
Зміни в коді шаблону.
Налаштування конфігурації.
Перевантаження пам’яті сервера.
Отже, якщо будь-який із вищезазначених пунктів має бути виконаний, ви побачите повідомлення про помилку Magento за замовчуванням «Сталася помилка обробки вашого запиту». Після цього друк винятків за замовчуванням вимкнено з міркувань безпеки.
Хоча ви бачите це повідомлення, ви не знаєте, яку саме помилку потрібно виправити. Щоб виправити її, вам спочатку потрібно з’ясувати джерело проблеми.
Виправлення проблеми «Сталася помилка обробки вашого запиту»
Виконайте такі кроки, щоб виправити проблему «Сталася помилка обробки вашого запиту» в Magento 2:
Підключіться до свого сервераihor
- 3 хв читання
Базові команди Linux
pwd – відображає інформацію про поточне розташування у файловій системі (шлях до каталогу (папки), в якій ви знаходитесь);
dir, ls – показує список файлів і папок у поточному каталозі;
cd – (змінити поточний каталог) дозволяє перейти до іншої папки;
Приклад:
cd ../ - will move to a folder on a higher level;cd foo - will go to the child folder "foo";cd /var - will go to the "var" folder located in the root of the file system;
touch fine_name – створити новий файл з назвою "fine_name";
mkdir dir_name – створити нову папку "dir_name" у поточному каталозі;
rm file_name - видалити файл "file_name";
rm -r dir_name - видалити папку "dir_name";
cp origin_name new_name - копіювати файли та папки;
mv old_name new_name - переміщувати файли та папки;
ln -s origin_name link_name - створити символічне посилання;
Пошук за вмістом
Щоб знайти файл за вмістом , скористайтеся цією командою:
grep -rnw 'path' -e 'some text'
Використовуйте модифікатор l , щоб відобразити лише список відповіднихihor
- 1 хв читання
Якщо ви вже використовуєте для ваших тегів HTML <img> і хочете також увімкнути WebP для фону CSS, правильний спосіб – використовувати кілька фонів у стилізації CSS.
Наприклад, у вас є елемент з фоном CSS .png:
.minicart-wrapper .action.showcart.desktop .fa-shopping-cart:before { background: url(../images/icon-cart.png) no-repeat;}
Щоб переключити його на WebP, вам потрібно вручну конвертувати зображення PNG/JPG/GIF у зображення WebP, використовуючи один із безкоштовних інструментів в Інтернеті. Збережіть його в тій самій папці та використовуйте CSS ось так:
.minicart-wrapper .action.showcart.desktop .fa-shopping-cart:before {
У цьому випадку всі браузери отримають зображення WebP, окрім тих, які не підтримують WebP. Вони завантажать зображення .png.
Примітка: якщо ви використовуєте Magento 2 з " no-webp" & "webp-supported "класи будуть автоматично додані до тегу <body> та будуть доступні вам одразу після встановлення.
Якщо ви використовуєте якусь іншу платформу або розширення, вамihor
- 3 хв читання
Доведено, що інформація сприймається краще під час перегляду відео, ніж під час читання довгого тексту. Вебсайти Magento не є винятком. Тож вам варто розглянути можливість додавання відео до вашого контенту.
Існує кілька варіантів додавання відео YouTube у Magento. Починаючи зі стандартних засобів і переходячи до розширених інструментів за допомогою , ви можете знайти найкраще рішення для своїх потреб.
Сьогодні ми розглянемо обидва варіанти, щоб полегшити вам подорож. Їхні функції та показники продуктивності різняться, тому є що розкрити.
Готові розпочати?
Як додати відео YouTube у Magento?
Ви можете використовувати WYSIWYG-редактор або конструктор сторінок для керування контентом. На щастя, обидва вони пропонують медіа-інструмент для додавання аудіовізуальних елементів.
Отже, щоб додати відео в Magento:
1. Перейдіть до місця, куди ви хочете вставити відео, і натисніть на значок Вставити/редагувати медіафайл на панелі інструментів редактора.
2. Введіть посилання на відео в папку Джерелоihor
- 1 хв читання
Якщо ви використовуєте Magento 2 і отримуєте помилку типу
Warning: file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages:error:14095126:SSL routines:ssl3_read_n:unexpected eof while reading in vendor/google/recaptcha/src/ReCaptcha/RequestMethod/Post.php on line 72Trace:<pre>#1 file_get_contents() called at [vendor/google/recaptcha/src/ReCaptcha/RequestMethod/Post.php:72]#2 ReCaptcha\RequestMethod\Post->submit() called at [vendor/google/recaptcha/src/ReCaptcha/ReCaptcha.php:156]#3 ReCaptcha\ReCaptcha->verify() called at [app/code/MSP/ReCaptcha/Model/Validate.php:79]#4 MSP\ReCaptcha\Model\Validate->validate() called at [app/code/MSP/ReCaptcha/Observer/ReCaptchaObserver.php:93]#5 MSP\ReCaptcha\Observer\ReCaptchaObserver->execute() called at [vendor/magento/framework/Event/Invoker/InvokerDefault.php:72]#6 Magento\Framework\Event\Invoker\InvokerDefault->_callObserverMethod() called at [vendor/magento/framework/Event/Invoker/InvokerDefault.php:60]...
під час спроби входуihor
- 1 хв читання
Щоб застосувати відкладене завантаження для зображень у вашому шаблоні Knockout, спочатку переконайтеся, що встановлено розширення .
Потім вставте зображення в шаблон HTML (my-template.html) ось так:
<img data-bind="attr: {src: $parent.getPixelUrl(), 'data-original': thumbnail, alt: code_article, loading: 'lazy', width: '165', height: '165' }"/>
Приклад:
<div class="options-block" data-bind="foreach: getOptionBlocks(), afterRender: initLazyLoad()"> <div class="option-item" data-bind="attr: {'data-sku': sku}"> <div class="image-block"> <img data-bind="attr: {src: $parent.getPixelUrl(), 'data-original': thumbnail, alt: code_article, loading: 'lazy', width: '165', height: '165' }"/> </div> </div> </div>
Ваш JS-файл перегляду має виглядати так:
define([ 'jquery', 'uiComponent', 'ko',], function ($, Component, ko) { 'use strict'; return Component.extend({ defaults: { template: 'Vendor_ExtensionName/my-template'ihor
- 1 хв читання
У версії 2.9.3 ми додали функцію, про яку просили багато клієнтів, а саме «використовувати шаблон пов’язаних товарів з каталогу за замовчуванням» замість власного шаблону пов’язаних товарів з блогу. Це допомагає автоматично відображати пов’язані товари на сторінці допису в темі дизайну. Коміт, пов’язаний із цією зміною, можна знайти за адресою GitHub.
На жаль, для Magento 2 існують тисячі тем, і деякі з них мають специфічний JS та CSS (наприклад, тема Porto). Тому, якщо ви використовуєте розширення Blog версії 2.9.3 або вище, і блок пов’язаних товарів виглядає погано, спробуйте зробити наступне:
1. Створіть новий файл у каталозі вашої теми:
app/design/frontend/ThemeVendor/themename/Magefan_Blog/layout/blog_post_view.xml
2. Додайте в нього цей код:
<?xml version="1.0"?><page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"> <body> <referenceBlock name="blog.post.relatedproducts" > <arguments>ihor
