Magento 2 module for displaying additional information in configuration

Overview

AvS_ScopeHint for Magento 2

Displays a hint when a configuration value is overwritten on a lower scope (website or store view).

Facts

Description

Whenever a configuration setting is overwritten by a lower level website or store view, an icon is displayed. On Mouseover, a list of all stores / websites which overwrite the setting is shown with the respective values. See the screenshot to get an impression of what the module does:

Screenshot

The module also displays the configuration code (which is used for ScopeConfigInterface::getValue()) with the configuration fields.

Requirements

  • PHP >= 5.6.0

Compatibility

  • Magento >= 2.1.0 (not tested on 2.0.x)

Installation Instructions

Via Composer:

  1. Call composer require avstudnitz/scopehint2 in your Magento root dir from the command line

Via Download

  1. Copy all the files into the newly created directory app/code/AvS/ScopeHint/ in the Magento 2 root.

In both cases:

  1. Enable the extension by calling bin/magento module:enable AvS_ScopeHint.
  2. Run bin/magento setup:upgrade.

Uninstallation

  1. Uninstall the extension by calling bin/magento module:uninstall AvS_ScopeHint.
  2. Remove all extension files from app/code/AvS/ScopeHint/ or use Composer to remove the extension if you have installed it with Composer

Support

If you have any issues with this extension, open an issue on GitHub.

Contribution

Any contribution is highly appreciated. The best way to contribute code is to open a pull request on GitHub.

Developer

Andreas von Studnitz, integer_net

http://www.integer-net.com

@avstudnitz

Licence

OSL - Open Software Licence 3.0

Copyright

(c) 2017 Andreas von Studnitz / integer_net GmbH

Comments
  • Update packagist

    Update packagist

    Dear developer,

    Can you please make sure packagist is also getting updated with the latest versions? I now need to add this repository to my composer.json in order to install the Magento 2.3 compatible version.

    opened by woutk88 4
  • Script tags interpreted

    Script tags interpreted

    Preconditions

    1. Mutli-website instance of Magento 2
    2. Install Avs_ScopeHint2 module

    Steps to reproduce

    1. Create a textarea configuration field
    2. Set a JavaScript script inside the configuration in a website or store view
    3. Save the configuration
    4. Inspect source code of the configuration page

    Expected result

    1. The script tag is not interpreted in the page

    Actual result

    1. The script tag is interpreted when the page is loaded because of the tooltip

    Configuration field:

    image

    DOM:

    image

    As you can see, the script tag set in the textarea field is interpreted in the DOM.

    Thank you for your help.

    opened by Axel29 3
  • Check for array, and implode if so

    Check for array, and implode if so

    Check for array, and implode if so

    Alternative would be to write code for the tier price attribute and retrieve 1 of the array values and show that

    Possible fix for #13 13

    opened by seansan 3
  • Cannot schedule new update for a product.

    Cannot schedule new update for a product.

    Hi,

    I do not know what the root cause is of this issue, but whenever I click on the "schedule new update" button, I am facing the message: "A technical problem with the server created an error. Try again to continue what you were doing. If the problem persists, try again later.".

    This is the stacktrace I have found in my log file:

    Fatal error: Uncaught Error: Call to a member function getId() on null in /app/vendor/avstudnitz/scopehint2/Plugin/ProductEavDataProviderPlugin.php:61 Stack trace: #0 /app/vendor/magento/framework/Interception/Interceptor.php(146): AvS\ScopeHint\Plugin\ProductEavDataProviderPlugin->afterSetupAttributeMeta(Object(Magento\CatalogStaging\Ui\DataProvider\Product\Form\Modifier\Eav\Interceptor), Array, Object(Magento\Catalog\Model\ResourceModel\Eav\Attribute\Interceptor), 'product-details', 0) #1 /app/vendor/magento/framework/Interception/Interceptor.php(153): Magento\CatalogStaging\Ui\DataProvider\Product\Form\Modifier\Eav\Interceptor->Magento\Framework\Interception{closure}(Object(Magento\Catalog\Model\ResourceModel\Eav\Attribute\Interceptor), 'product-details', 0) #2 /app/generated/code/Magento/CatalogStaging/Ui/DataProvider/Product/Form/Modifier/Eav/Interceptor.php(78): Magento\CatalogStaging\Ui\DataProvider\Product\Form\Modifier\Eav\Interceptor->___callPlugins('setupAttributeM...', Array, Array) #3 /app/vendor/magento/mod in /app/vendor/avstudnitz/scopehint2/Plugin/ProductEavDataProviderPlugin.php on line 61.

    The issue is solved if I change this code:

    if ($product->getId() === null) {
        return $result;
    }
    

    to:

    if ($product === null || $product->getId() === null) {
        return $result;
    }
    

    I don't have a clue why the registry sometimes returns a null value for "current_product".

    Can you help me out?

    opened by jvanschie 2
  • If a product attribute value can't be casted to a string, try to repr…

    If a product attribute value can't be casted to a string, try to repr…

    …esent it as json data. This fixes crashing the product edit page when using different tier prices over multiple websites for example.

    This fixes https://github.com/avstudnitz/AvS_ScopeHint2/issues/13 and is a replacement for another proposed PR: https://github.com/avstudnitz/AvS_ScopeHint2/pull/15

    Steps to reproduce the original reported problem:

    • Setup a vanilla Magento installation (tested both on 2.1.16 and 2.3.2)
    • Install avstudnitz/scopehint2 v1.1.1
    • In the configuration, go to Catalog > Catalog > Price
    • Change 'Catalog Price Scope' to 'Website'
    • Go to Stores > All Stores and make sure you have a least 2 websites, stores & store views
    • Create a new product, assign it to all the websites and setup tier prices (under 'Advanced Pricing')
    • Switch to the other storeview scope associated with the second website
    • Setup different tier prices on that scope
    • See the page crashing without this fix

    The reason why it crashes, is because the tier prices are returned as an array instead of the expected string. We've seen a similar problem with a third party module, which also returns an array, but a multi dimensional one. The original attempt to fix this tried to implode the value if it was an array, but that won't work on a multi dimensional array.

    This PR attempt to fix all of these possible scenario's.

    I've chosen a slightly different approach here, because I think there might be more than only array types not being able to get casted to a string. Here I'm trying to cast the value to a string in a try-catch statement, if this fails, the \Throwable will get catched and the error won't appear on the frontend. If this happens, I'm trying to json_encode the value, to get a string representation of the value. If that still fails, we silently ignore the problem and won't output anything.

    In the case of the tier prices problem, there is another bug in that the tooltip doesn't show up for some reason. I haven't looked why that that happens yet, but that should be considered a different bug. This PR is trying make the product edit page more stable, I prefer to have it not crashing over showing the correct tooltip. Fixing the tooltip can be done at a later stage in my opinion.

    If there are remarks, let me know! 🙂

    opened by hostep 2
  • Returns result if no product is found

    Returns result if no product is found

    Dear Herr Studnitz,

    While developing a web store using your handy plugin I discovered a game-breaking bug.

    Bug The bug in question would throw an exception when I wanted to add a new product to the catalog. Upon closer inspection I discovered that your plugin always assumes that a product is found before it runs a certain foreach() loop. But if I were to make a new product then no product is found and an exception is thrown.

    Solution As a solution I've implemented a tiny if() statement that checks whether or not the $product variable has an id. If it doesn't then the $result is returned. This means that the foreach() loop needing product information is not run and the exception is not thrown. Of course, when an id has been found then it resumes operation like you intended.

    This small solution works on my store as expected. I hope that you will find my solution useful. If you have any questions, feedback or other remarks please feel free to contact me.

    Kind regards, Daniël Riezebos

    opened by DanielRiezebos 2
  • POC scope hints for products

    POC scope hints for products

    Support products for scope hints. Work in progress based on work by @peterjaap but with better performance.

    • EAV tooltip doesn't support html, this needs to be fixed.
    • When switching to a store view it compares those values against all other stores.
    opened by rikwillems 2
  • main.CRITICAL: Exception: Notice: Array to string conversion in ConfigFieldPlugin.php

    main.CRITICAL: Exception: Notice: Array to string conversion in ConfigFieldPlugin.php

    I think this issue arised because of the latest update?

    [2022-11-02T10:16:51.485009+00:00] main.CRITICAL: Exception: Notice: Array to string conversion in /public_html/vendor/avstudnitz/scopehint2/Plugin/ConfigFieldPlugin.php on line 138 in /public_html/vendor/magento/framework/App/ErrorHandler.php:62 Stack trace: #0 /public_html/vendor/avstudnitz/scopehint2/Plugin/ConfigFieldPlugin.php(138): Magento\Framework\App\ErrorHandler->handler() #1 /public_html/vendor/avstudnitz/scopehint2/Plugin/ConfigFieldPlugin.php(67): AvS\ScopeHint\Plugin\ConfigFieldPlugin->getScopeHint() #2 /public_html/vendor/magento/framework/Interception/Interceptor.php(146): AvS\ScopeHint\Plugin\ConfigFieldPlugin->afterGetTooltip() #3 /public_html/vendor/magento/framework/Interception/Interceptor.php(153): Magento\Config\Model\Config\Structure\Element\Field\Interceptor->Magento\Framework\Interception{closure}() #4 /public_html/generated/code/Magento/Config/Model/Config/Structure/Element/Field/Interceptor.php(32): Magento\Config\Model\Config\Structure\Element\Field\Interceptor->___callPlugins() #5 /public_html/vendor/magento/module-config/Block/System/Config/Form.php(369): Magento\Config\Model\Config\Structure\Element\Field\Interceptor->getTooltip() #6 /public_html/vendor/magento/module-config/Block/System/Config/Form.php(316): Magento\Config\Block\System\Config\Form->_initElement() #7 /public_html/vendor/magento/module-config/Block/System/Config/Form.php(256): Magento\Config\Block\System\Config\Form->initFields() #8 /public_html/vendor/magento/module-config/Block/System/Config/Form.php(202): Magento\Config\Block\System\Config\Form->_initGroup() #9 /public_html/vendor/magento/module-config/Block/System/Config/Form.php(542): Magento\Config\Block\System\Config\Form->initForm() #10 /public_html/vendor/magento/framework/View/Element/AbstractBlock.php(1094): Magento\Config\Block\System\Config\Form->_beforeToHtml() #11 /public_html/vendor/magento/framework/View/Element/AbstractBlock.php(1099): Magento\Framework\View\Element\AbstractBlock->Magento\Framework\View\Element{closure}() #12 /public_html/vendor/magento/framework/View/Element/AbstractBlock.php(660): Magento\Framework\View\Element\AbstractBlock->_loadCache() #13 /public_html/vendor/magento/framework/View/Layout.php(578): Magento\Framework\View\Element\AbstractBlock->toHtml() #14 /public_html/vendor/magento/framework/View/Layout.php(555): Magento\Framework\View\Layout->_renderBlock() #15 /public_html/generated/code/Magento/Framework/View/Layout/Interceptor.php(149): Magento\Framework\View\Layout->renderNonCachedElement() #16 /public_html/vendor/magento/framework/View/Layout.php(510): Magento\Framework\View\Layout\Interceptor->renderNonCachedElement() #17 /public_html/generated/code/Magento/Framework/View/Layout/Interceptor.php(140): Magento\Framework\View\Layout->renderElement() #18 /public_html/vendor/magento/framework/View/Element/AbstractBlock.php(507): Magento\Framework\View\Layout\Interceptor->renderElement() #19 /public_html/var/view_preprocessed/pub/static/vendor/magento/module-config/view/adminhtml/templates/system/config/edit.phtml(1): Magento\Framework\View\Element\AbstractBlock->getChildHtml() #20 /public_html/vendor/magento/framework/View/TemplateEngine/Php.php(71): include('/pu...') #21 /public_html/vendor/magento/framework/Interception/Interceptor.php(58): Magento\Framework\View\TemplateEngine\Php->render() #22 /public_html/vendor/magento/framework/Interception/Interceptor.php(138): Magento\Framework\View\TemplateEngine\Php\Interceptor->___callParent() #23 /public_html/vendor/magento/framework/Interception/Interceptor.php(153): Magento\Framework\View\TemplateEngine\Php\Interceptor->Magento\Framework\Interception{closure}() #24 /public_html/generated/code/Magento/Framework/View/TemplateEngine/Php/Interceptor.php(23): Magento\Framework\View\TemplateEngine\Php\Interceptor->___callPlugins() #25 /public_html/vendor/magento/framework/View/Element/Template.php(263): Magento\Framework\View\TemplateEngine\Php\Interceptor->render() #26 /public_html/vendor/magento/framework/View/Element/Template.php(293): Magento\Framework\View\Element\Template->fetchView() #27 /public_html/vendor/magento/module-backend/Block/Template.php(141): Magento\Framework\View\Element\Template->_toHtml() #28 /public_html/vendor/magento/framework/View/Element/AbstractBlock.php(1095): Magento\Backend\Block\Template->_toHtml() #29 /public_html/vendor/magento/framework/View/Element/AbstractBlock.php(1099): Magento\Framework\View\Element\AbstractBlock->Magento\Framework\View\Element{closure}() #30 /public_html/vendor/magento/framework/View/Element/AbstractBlock.php(660): Magento\Framework\View\Element\AbstractBlock->_loadCache() #31 /public_html/vendor/magento/framework/View/Layout.php(578): Magento\Framework\View\Element\AbstractBlock->toHtml() #32 /public_html/vendor/magento/framework/View/Layout.php(555): Magento\Framework\View\Layout->_renderBlock() #33 /public_html/generated/code/Magento/Framework/View/Layout/Interceptor.php(149): Magento\Framework\View\Layout->renderNonCachedElement() #34 /public_html/vendor/magento/framework/View/Layout.php(510): Magento\Framework\View\Layout\Interceptor->renderNonCachedElement() #35 /public_html/generated/code/Magento/Framework/View/Layout/Interceptor.php(140): Magento\Framework\View\Layout->renderElement() #36 /public_html/vendor/magento/framework/View/Layout.php(606): Magento\Framework\View\Layout\Interceptor->renderElement() #37 /public_html/vendor/magento/framework/View/Layout.php(557): Magento\Framework\View\Layout->_renderContainer() #38 /public_html/generated/code/Magento/Framework/View/Layout/Interceptor.php(149): Magento\Framework\View\Layout->renderNonCachedElement() #39 /public_html/vendor/magento/framework/View/Layout.php(510): Magento\Framework\View\Layout\Interceptor->renderNonCachedElement() #40 /public_html/generated/code/Magento/Framework/View/Layout/Interceptor.php(140): Magento\Framework\View\Layout->renderElement() #41 /public_html/vendor/magento/framework/View/Layout.php(606): Magento\Framework\View\Layout\Interceptor->renderElement() #42 /public_html/vendor/magento/framework/View/Layout.php(557): Magento\Framework\View\Layout->_renderContainer() #43 /public_html/generated/code/Magento/Framework/View/Layout/Interceptor.php(149): Magento\Framework\View\Layout->renderNonCachedElement() #44 /public_html/vendor/magento/framework/View/Layout.php(510): Magento\Framework\View\Layout\Interceptor->renderNonCachedElement() #45 /public_html/generated/code/Magento/Framework/View/Layout/Interceptor.php(140): Magento\Framework\View\Layout->renderElement() #46 /public_html/vendor/magento/framework/View/Layout.php(606): Magento\Framework\View\Layout\Interceptor->renderElement() #47 /public_html/vendor/magento/framework/View/Layout.php(557): Magento\Framework\View\Layout->_renderContainer() #48 /public_html/generated/code/Magento/Framework/View/Layout/Interceptor.php(149): Magento\Framework\View\Layout->renderNonCachedElement() #49 /public_html/vendor/magento/framework/View/Layout.php(510): Magento\Framework\View\Layout\Interceptor->renderNonCachedElement() #50 /public_html/generated/code/Magento/Framework/View/Layout/Interceptor.php(140): Magento\Framework\View\Layout->renderElement() #51 /public_html/vendor/magento/framework/View/Layout.php(606): Magento\Framework\View\Layout\Interceptor->renderElement() #52 /public_html/vendor/magento/framework/View/Layout.php(557): Magento\Framework\View\Layout->_renderContainer() #53 /public_html/generated/code/Magento/Framework/View/Layout/Interceptor.php(149): Magento\Framework\View\Layout->renderNonCachedElement() #54 /public_html/vendor/magento/framework/View/Layout.php(510): Magento\Framework\View\Layout\Interceptor->renderNonCachedElement() #55 /public_html/generated/code/Magento/Framework/View/Layout/Interceptor.php(140): Magento\Framework\View\Layout->renderElement() #56 /public_html/vendor/magento/framework/View/Layout.php(606): Magento\Framework\View\Layout\Interceptor->renderElement() #57 /public_html/vendor/magento/framework/View/Layout.php(557): Magento\Framework\View\Layout->_renderContainer() #58 /public_html/generated/code/Magento/Framework/View/Layout/Interceptor.php(149): Magento\Framework\View\Layout->renderNonCachedElement() #59 /public_html/vendor/magento/framework/View/Layout.php(510): Magento\Framework\View\Layout\Interceptor->renderNonCachedElement() #60 /public_html/generated/code/Magento/Framework/View/Layout/Interceptor.php(140): Magento\Framework\View\Layout->renderElement() #61 /public_html/vendor/magento/framework/View/Layout.php(606): Magento\Framework\View\Layout\Interceptor->renderElement() #62 /public_html/vendor/magento/framework/View/Layout.php(557): Magento\Framework\View\Layout->_renderContainer() #63 /public_html/generated/code/Magento/Framework/View/Layout/Interceptor.php(149): Magento\Framework\View\Layout->renderNonCachedElement() #64 /public_html/vendor/magento/framework/View/Layout.php(510): Magento\Framework\View\Layout\Interceptor->renderNonCachedElement() #65 /public_html/generated/code/Magento/Framework/View/Layout/Interceptor.php(140): Magento\Framework\View\Layout->renderElement() #66 /public_html/vendor/magento/framework/View/Layout.php(606): Magento\Framework\View\Layout\Interceptor->renderElement() #67 /public_html/vendor/magento/framework/View/Layout.php(557): Magento\Framework\View\Layout->_renderContainer() #68 /public_html/generated/code/Magento/Framework/View/Layout/Interceptor.php(149): Magento\Framework\View\Layout->renderNonCachedElement() #69 /public_html/vendor/magento/framework/View/Layout.php(510): Magento\Framework\View\Layout\Interceptor->renderNonCachedElement() #70 /public_html/generated/code/Magento/Framework/View/Layout/Interceptor.php(140): Magento\Framework\View\Layout->renderElement() #71 /public_html/vendor/magento/framework/View/Layout.php(606): Magento\Framework\View\Layout\Interceptor->renderElement() #72 /public_html/vendor/magento/framework/View/Layout.php(557): Magento\Framework\View\Layout->_renderContainer() #73 /public_html/generated/code/Magento/Framework/View/Layout/Interceptor.php(149): Magento\Framework\View\Layout->renderNonCachedElement() #74 /public_html/vendor/magento/framework/View/Layout.php(510): Magento\Framework\View\Layout\Interceptor->renderNonCachedElement() #75 /public_html/generated/code/Magento/Framework/View/Layout/Interceptor.php(140): Magento\Framework\View\Layout->renderElement() #76 /public_html/vendor/magento/framework/View/Layout.php(975): Magento\Framework\View\Layout\Interceptor->renderElement() #77 /public_html/generated/code/Magento/Framework/View/Layout/Interceptor.php(347): Magento\Framework\View\Layout->getOutput() #78 /public_html/vendor/magento/framework/View/Result/Page.php(260): Magento\Framework\View\Layout\Interceptor->getOutput() #79 /public_html/vendor/magento/framework/View/Result/Layout.php(171): Magento\Framework\View\Result\Page->render() #80 /public_html/generated/code/Magento/Backend/Model/View/Result/Page/Interceptor.php(32): Magento\Framework\View\Result\Layout->renderResult() #81 /public_html/vendor/magento/framework/App/Http.php(120): Magento\Backend\Model\View\Result\Page\Interceptor->renderResult() #82 /public_html/generated/code/Magento/Framework/App/Http/Interceptor.php(23): Magento\Framework\App\Http->launch() #83 /public_html/vendor/magento/framework/App/Bootstrap.php(264): Magento\Framework\App\Http\Interceptor->launch() #84 /public_html/pub/index.php(30): Magento\Framework\App\Bootstrap->run() #85 {main} [] []

    opened by jorgb90 1
  • Fix array to string conversion exception

    Fix array to string conversion exception

    Changes in https://github.com/avstudnitz/AvS_ScopeHint2/pull/28 introduced a change where the current value and scope value are cast to string. This leads however to the following exception, when using an array-serialized/serialized config field in store configuration:

    Exception #0 (Exception): Warning: Array to string conversion in /var/www/html/vendor/avstudnitz/scopehint2/Plugin/ConfigFieldPlugin.php on line 138

    Since the array values can be structured in multiple ways, I propose to just skip the array values and not generate a scope hint label for such cases. These kind of arrays often contain multiple entries anyways, so displaying changes in a popover is tricky anyways.

    Noticed the bug while trying to configure the DHL extension which uses a custom ArraySerialized class. But Magento has those kind of classes in the core as well.

    opened by therouv 1
  • \AvS\ScopeHint\Plugin\ConfigFieldPlugin::afterGetComment may get Phrase instead of string

    \AvS\ScopeHint\Plugin\ConfigFieldPlugin::afterGetComment may get Phrase instead of string

    \AvS\ScopeHint\Plugin\ConfigFieldPlugin::afterGetComment is currently assuming that $result is a string. Actually, it may be a string or a /Magento/Framework/Phrase. Can you update the codebase so that the method returns a Phrase if it receives a phrase? Currently this module is breaking our admin panel, since in \Magento\SharedCatalog\Block\Adminhtml\System\Config\WebsiteRestriction\IsActive::prepareComment the method getText() is called on the result of this method, throwing an error because it's converted from a Phrase to a string in the plugin.

    opened by dot319 1
  • M2 version production ready

    M2 version production ready

    M2 version production ready

    Would this work on M2.1.3 and is it ready for production. Also found https://github.com/ericthehacker/magento2-configscopehints -- currently investigating solutions

    thanks for the update!

    opened by seansan 1
  • Add scopehint on the category edit form

    Add scopehint on the category edit form

    Hi,

    Here's a feature I really wanted from this module. I adapted the \AvS\ScopeHint\Plugin\ProductEavDataProviderPlugin for the category edit form. I tried to stay close to the module coding style.

    Check it out and tell me what you think.

    Cheers

    opened by thedotwriter 1
  • Add support to the product overview

    Add support to the product overview

    As posted on Magento Slack:

    Just found out that in the admin products overview when set to 'All Store Views', you can't see if a value is overruled for a specific store view. This makes it hard to find out why, for instance, the status stays 'enabled' when I'm disabling the product using the mass action.

    Is there a method to mark a value should it be overruled. Or might it be possible to show overruled values in the 'All Store Views'. Example: image

    And was pointed to this plugin in which support is already being added for the product detail edit, https://github.com/avstudnitz/AvS_ScopeHint2/issues/4 .

    Could the support be extended to the product overview?

    opened by evs-xsarus 0
Releases(1.2.1)
Owner
Andreas von Studnitz
Andreas von Studnitz
Magento 2 module to automatically flush the cache whenever you save something in the System Configuration

Yireo AutoFlushCache Magento 2 module to automatically flush the cache whenever you save something in the System Configuration. Do NOT use this in pro

Yireo 21 May 14, 2022
Magento n98-magerun module for importing and exporting configuration data

Magento n98-magerun module for importing and exporting configuration data. Import supports hierarchical folder structure and of course different environments.

Zookal 61 Apr 1, 2022
Displaying damage when hitting a player

DamageIndicator Displaying damage when hitting a player Information Command: No Permission: Coming soon Settings: Settings in config.yml How to use ?

kostamax27 2 Oct 13, 2021
CRUD Build a system to insert student name information, grade the class name, and edit and delete this information

CRUD Build a system to insert student name information, grade the class name, and edit and delete this information

Sajjad 2 Aug 14, 2022
This Magento extension provides a Real Full Page Caching for Magento powered by Varnish with support of Session-Based information caching (Cart, Customer Accounts, ...) via ESI includes

This Magento extension provides a Real Full Page Caching (FPC) for Magento powered by Varnish with support of Session-Based information caching (Cart, Customer Accounts, ...) via ESI includes

Hugues Alary 95 Feb 11, 2022
Magento 2 Module Experius Page Not Found 404. This module saves all 404 url to a database table

Magento 2 Module Experius Page Not Found 404 This module saves all 404 urls to a database table. Adds an admin grid with 404s It includes a count so y

Experius 28 Dec 9, 2022
A redacted PHP port of Underscore.js with additional functions and goodies – Available for Composer and Laravel

Underscore.php The PHP manipulation toolbelt First off : Underscore.php is not a PHP port of Underscore.js (well ok I mean it was at first). It's does

Emma Fabre 1.1k Dec 11, 2022
This script allows to bypass Oracle Cloud Infrastructure 'Out of host capacity' error immediately when additional OCI capacity will appear in your Home Region / Availability domain.

Resolving Oracle Cloud "Out of Capacity" issue and getting free VPS with 4 ARM cores / 24GB of memory Very neat and useful configuration was recently

Alexander Hitrov 323 Jan 6, 2023
Auto-expiring tags with additional payload data on any eloquent model.

Laravel TempTag Auto-expiring tags with additional payload data on any eloquent model. Installation first you need to install and configure mongodb in

masoud nazarpoor 2 Sep 18, 2021
It's a CodeIgniter Library for Captcha Generation. With additional Flexibility .

Original Source : Pavel Tzonkov <[email protected]> Source Link : http://gscripts.net/free-php-scripts/Anti_Spam_Scripts/Image_Validator/d

Chris # 4 Sep 2, 2022
Laravel Pipeline with DB transaction support, events and additional methods

Laravel Enhanced Pipeline Laravel Pipeline with DB transaction support, events and additional methods #StandWithUkraine Installation Install the packa

Michael Rubél 33 Dec 3, 2022
OctoberCMS BlogHub Plugin - Extends RainLab's Blog extension with custom meta details, additional archives and more.

BlogHub extends the RainLab.Blog OctoberCMS plugin with many necessary and helpful features such as Moderatable Comments, Promotable Tags, Custom Meta Fields, additional Archives, basic Statistics, Views counter and more.

rat.md 5 Dec 15, 2022
Provide CSV, JSON, XML and YAML files as an Import Source for the Icinga Director and optionally ship hand-crafted additional Icinga2 config files

Icinga Web 2 Fileshipper module The main purpose of this module is to extend Icinga Director using some of it's exported hooks. Based on them it offer

Icinga 25 Sep 18, 2022
Display some useful information in the reports module.

Useful information in the reports module : xclass, ajax, cliKeys, eID, general status of the system (encoding, DB, php vars...), hooks, compare local and TER extension (diff), used content type, used plugins, ExtDirect... It can really help you during migration or new existing project (to have a global reports of the system).

CERDAN Yohann 12 Aug 8, 2022
Automatically load the next page of products in Magento. Easy to install and configure, this module works 100% out of the box with vanilla Magento 1.9.x and earlier.

Automatically load the next page of products in Magento. Easy to install and configure, this module works 100% out of the box with vanilla Magento 1.9.x and earlier.

Strategery 123 Nov 20, 2021
Magento 2 Extension to cleanup admin menu and Store > Configuration area by arranging third party extension items.

Clean Admin Menu - Magento 2 Extension It will merge all 3rd party extension's menu items in backend's primary menu to a common menu item named "Exten

RedChamps 109 Jan 3, 2023
Import/Export configuration data in Magento 2 via CLI.

ConfigImportExport This module provides new CLI commands for Magento 2 to import/export data in/from core_config_data. This module is inspired by the

semaio 135 Dec 9, 2022
Mark Shust's Docker Configuration for Magento

markshust/docker-magento Mark Shust's Docker Configuration for Magento Table of contents Docker Hub Free Course Usage Prerequisites Setup Updates Cust

Mark Shust 1.8k Jan 8, 2023