Best way to Edit Default files & Apply Custom Application in Magento 2.3?
What are all the best way to edit core files in Magento 2.3. eg: magento 1.9 edit app/code/local or community instead of app/code/core.
Note: What are all files I need to focus for Future Version updates.
upgrade core magento2.3 edit application
This question has an open bounty worth +50
reputation from zus ending in 6 days.
Looking for an answer drawing from credible and/or official sources.
add a comment |
What are all the best way to edit core files in Magento 2.3. eg: magento 1.9 edit app/code/local or community instead of app/code/core.
Note: What are all files I need to focus for Future Version updates.
upgrade core magento2.3 edit application
This question has an open bounty worth +50
reputation from zus ending in 6 days.
Looking for an answer drawing from credible and/or official sources.
1
Still Looking Best Answer...
– zus
Dec 27 '18 at 5:49
Please check my answer
– Sourav
yesterday
Hello @zus, I recommend if you just want to modify output on minor customization I recommend Plugins for the same. Override via preference is for big customization not for small.
– Aditya Shah
yesterday
add a comment |
What are all the best way to edit core files in Magento 2.3. eg: magento 1.9 edit app/code/local or community instead of app/code/core.
Note: What are all files I need to focus for Future Version updates.
upgrade core magento2.3 edit application
What are all the best way to edit core files in Magento 2.3. eg: magento 1.9 edit app/code/local or community instead of app/code/core.
Note: What are all files I need to focus for Future Version updates.
upgrade core magento2.3 edit application
upgrade core magento2.3 edit application
edited Dec 26 '18 at 7:25
Amit Bera♦
57.2k1374170
57.2k1374170
asked Dec 26 '18 at 7:02
zus
83116
83116
This question has an open bounty worth +50
reputation from zus ending in 6 days.
Looking for an answer drawing from credible and/or official sources.
This question has an open bounty worth +50
reputation from zus ending in 6 days.
Looking for an answer drawing from credible and/or official sources.
1
Still Looking Best Answer...
– zus
Dec 27 '18 at 5:49
Please check my answer
– Sourav
yesterday
Hello @zus, I recommend if you just want to modify output on minor customization I recommend Plugins for the same. Override via preference is for big customization not for small.
– Aditya Shah
yesterday
add a comment |
1
Still Looking Best Answer...
– zus
Dec 27 '18 at 5:49
Please check my answer
– Sourav
yesterday
Hello @zus, I recommend if you just want to modify output on minor customization I recommend Plugins for the same. Override via preference is for big customization not for small.
– Aditya Shah
yesterday
1
1
Still Looking Best Answer...
– zus
Dec 27 '18 at 5:49
Still Looking Best Answer...
– zus
Dec 27 '18 at 5:49
Please check my answer
– Sourav
yesterday
Please check my answer
– Sourav
yesterday
Hello @zus, I recommend if you just want to modify output on minor customization I recommend Plugins for the same. Override via preference is for big customization not for small.
– Aditya Shah
yesterday
Hello @zus, I recommend if you just want to modify output on minor customization I recommend Plugins for the same. Override via preference is for big customization not for small.
– Aditya Shah
yesterday
add a comment |
3 Answers
3
active
oldest
votes
For new storefront theme
Create a directory for the theme under
app/design/frontend/<your_vendor_name>/<your_theme_name>
.Add a declaration file theme.xml and optionally create etc directory
and create a file named view.xml to the theme directory.- Add a composer.json file.
- Add registration.php.
- Create directories for CSS, JavaScript, images, and fonts.
- Configure your theme in the Admin panel.
Create a theme directory
To create the directory for your theme:
Go to /app/design/frontend.
Create a new directory named according to your vendor name:
/app/design/frontend/.Under the directory, create a directory named according to
your theme.
app/design/frontend/
├── <Vendor>/
│ │ ├──...<theme>/
│ │ │ ├── ...
│ │ │ ├── ...
Create directories for static files
Your theme will likely contain several types of static files:
- Styles
- Fonts
- JavaScript
- Images
Each type should be stored in a separate sub-directory of web in your theme folder:
app/design/<area>/<Vendor>/<theme>/
├── web/
│ ├── css/
│ │ ├── source/
│ ├── fonts/
│ ├── images/
│ ├── js/
Your theme directory structure now
At this point your theme file structure looks as follows:
app/design/frontend/<Vendor>/
├── <theme>/
│ ├── etc/
│ │ ├── view.xml
│ ├── web/
│ │ ├── images
│ │ │ ├── logo.svg
│ ├── registration.php
│ ├── theme.xml
│ ├── composer.json
Recommended reading
- Theme
- Checklist of modules
- Static view files processing
For Block
Build directories just like above -
magento2 --- app --- code
|--- Sample --- HelloWorld
| --- Block
| --- etc
| --- module.xml
| --- di.xml
- Create module.xml to define a Magento 2 extension:
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/Module/etc/module.xsd">
<module name="Sample_HelloWorld" setup_version="0.0.1"/>
</config>
- Set preference in di.xml
Create di.xml to refer the overriding block class:
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/ObjectManager/etc/config.xsd">
<preference for="MagentoThemeBlockHtmlTitle" type="SampleHelloWorldBlockHelloTitle" />
</config>
- Define an overriding class
Define HelloTitle.php
under magento2/app/code/Sample/HelloWorld/Block
:
<?php
namespace SampleHelloWorldBlock;
use MagentoFrameworkViewElementTemplate;
class HelloTitle extends MagentoThemeBlockHtmlTitle
{
public function getPageTitle()
{
return 'haha9999';
}
protected function _toHtml()
{
$this->setModuleName($this->extractModuleName('MagentoThemeBlockHtmlTitle'));
return parent::_toHtml();
}
}
For Models
Create Directories
magento2 --- app --- code
|--- Sample --- HelloWorld
| --- etc
| --- Model
| --- Catalog
Configuration of Module
Create module.xml
in app/code/Sample/HelloWorld/etc
and add the following code in it:
<?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="Sample_HelloWorld" setup_version="1.0.1">
</module>
</config>
Override di.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<preference for="MagentoCatalogModelProduct" type="SampleHelloWorldModelCatalogProduct" />
</config>
Override Product.php
Now create Product.php
in app/code/Sample/HelloWorld/Model/Catalog
and add the following code in it.
<?php
namespace SampleHelloWorldModelCatalog;
class Product extends MagentoCatalogModelProduct
{
public function getName()
{
return $this->_getData(self::NAME) . ' + Demo Text';
}
public function getSku()
{
return "123-Demo";
}
}
Launch SSH and Run Commands
php bin/magento module:enable Magenticians_Moduleproduct
php bin/magento setup:upgrade
php bin/magento setup:di:compile
php bin/magento cache:clean
php bin/magento cache:flush
Note : We're using preference to override Above model and blocks,
Where (in some cases, it always depends on customization) we can also use Plugins and Virtual classes using Dependency
Injections which is Highly recommended.
add a comment |
If you want to override block, controller, model ... files, then you have to create module.
If you want to change only template file then create theme and put your file in theme.
How to create custom module
https://www.magestore.com/magento-2-tutorial/magento-2-modules/
How to override block, controller, model
https://webkul.com/blog/overriding-rewriting-classes-magento2/
How to create custom theme
https://devdocs.magento.com/guides/v2.3/frontend-dev-guide/themes/theme-create.html
I hope this will help you.
add a comment |
One of the most common tasks for a Magento 2 developer is overriding a template.
In Magento 2, there are two main methods for overriding a template:
Theme file path
Layout Block Argument
The template path method is used when building a theme and the layout method is used when building a module. They are the simplest, most straightforward, and easiest to understand methods. You will almost always be using one of these two methods. For the very few times, these two methods are not available, you have two other methods to choose from:
Class preference
Plugin
1) Theme File Path
In Magento 2, themes can override any module’s or parent theme’s layout, template, or web (css, js, etc.) file simply by placing it in <theme_dir>/<Vendor>_<Module>/path/to/file
For example, If you want to override the template located at <theme_dir>/<Vendor>_<Module>/view/html/header.phtml
for the Magento_Theme module, you would place your template in <theme_dir>/Magento_Theme/templates/html/header.phtml.
There are several block definitions in Magento 2 that do not have the Vendor_Module prefix to specify which module the template belongs to. In these cases, the block’s class attribute will define what module the template belongs to. For example if you were to find a block definition in the Magento_Checkout module like this you would place your template inside the Magento_Checkout module directory inside your theme.
This Magento 2 devdoc on theme-inheritance goes into more detail on how to override a template in a theme.
2) Layout Block Argument
Module Creator
The layout method should be used when building a module. To override a template using layout XML, you only need to override the block’s template argument. Using the template Magento_Wishlist/view/frontend/templates/view.phtml
as an example, to override view.phtml with your own template, you first have to create a new layout file. <Vendor>_<Module>/view/frontend/layout/wishlist_index_index.xml
wishlist_index_index.xml
<?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="customer.wishlist">
<arguments>
<argument name="template" xsi:type="string">Vendor_Module::view.phtml</argument>
</arguments>
</referenceBlock>
</body>
</page>
Now you have to place your new custom template in the location you specified in your layout file. For this example, that is <Vendor>_<Module>/view/frontend/templates/view.phtml
add a comment |
Your Answer
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "479"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmagento.stackexchange.com%2fquestions%2f255777%2fbest-way-to-edit-default-files-apply-custom-application-in-magento-2-3%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
3 Answers
3
active
oldest
votes
3 Answers
3
active
oldest
votes
active
oldest
votes
active
oldest
votes
For new storefront theme
Create a directory for the theme under
app/design/frontend/<your_vendor_name>/<your_theme_name>
.Add a declaration file theme.xml and optionally create etc directory
and create a file named view.xml to the theme directory.- Add a composer.json file.
- Add registration.php.
- Create directories for CSS, JavaScript, images, and fonts.
- Configure your theme in the Admin panel.
Create a theme directory
To create the directory for your theme:
Go to /app/design/frontend.
Create a new directory named according to your vendor name:
/app/design/frontend/.Under the directory, create a directory named according to
your theme.
app/design/frontend/
├── <Vendor>/
│ │ ├──...<theme>/
│ │ │ ├── ...
│ │ │ ├── ...
Create directories for static files
Your theme will likely contain several types of static files:
- Styles
- Fonts
- JavaScript
- Images
Each type should be stored in a separate sub-directory of web in your theme folder:
app/design/<area>/<Vendor>/<theme>/
├── web/
│ ├── css/
│ │ ├── source/
│ ├── fonts/
│ ├── images/
│ ├── js/
Your theme directory structure now
At this point your theme file structure looks as follows:
app/design/frontend/<Vendor>/
├── <theme>/
│ ├── etc/
│ │ ├── view.xml
│ ├── web/
│ │ ├── images
│ │ │ ├── logo.svg
│ ├── registration.php
│ ├── theme.xml
│ ├── composer.json
Recommended reading
- Theme
- Checklist of modules
- Static view files processing
For Block
Build directories just like above -
magento2 --- app --- code
|--- Sample --- HelloWorld
| --- Block
| --- etc
| --- module.xml
| --- di.xml
- Create module.xml to define a Magento 2 extension:
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/Module/etc/module.xsd">
<module name="Sample_HelloWorld" setup_version="0.0.1"/>
</config>
- Set preference in di.xml
Create di.xml to refer the overriding block class:
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/ObjectManager/etc/config.xsd">
<preference for="MagentoThemeBlockHtmlTitle" type="SampleHelloWorldBlockHelloTitle" />
</config>
- Define an overriding class
Define HelloTitle.php
under magento2/app/code/Sample/HelloWorld/Block
:
<?php
namespace SampleHelloWorldBlock;
use MagentoFrameworkViewElementTemplate;
class HelloTitle extends MagentoThemeBlockHtmlTitle
{
public function getPageTitle()
{
return 'haha9999';
}
protected function _toHtml()
{
$this->setModuleName($this->extractModuleName('MagentoThemeBlockHtmlTitle'));
return parent::_toHtml();
}
}
For Models
Create Directories
magento2 --- app --- code
|--- Sample --- HelloWorld
| --- etc
| --- Model
| --- Catalog
Configuration of Module
Create module.xml
in app/code/Sample/HelloWorld/etc
and add the following code in it:
<?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="Sample_HelloWorld" setup_version="1.0.1">
</module>
</config>
Override di.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<preference for="MagentoCatalogModelProduct" type="SampleHelloWorldModelCatalogProduct" />
</config>
Override Product.php
Now create Product.php
in app/code/Sample/HelloWorld/Model/Catalog
and add the following code in it.
<?php
namespace SampleHelloWorldModelCatalog;
class Product extends MagentoCatalogModelProduct
{
public function getName()
{
return $this->_getData(self::NAME) . ' + Demo Text';
}
public function getSku()
{
return "123-Demo";
}
}
Launch SSH and Run Commands
php bin/magento module:enable Magenticians_Moduleproduct
php bin/magento setup:upgrade
php bin/magento setup:di:compile
php bin/magento cache:clean
php bin/magento cache:flush
Note : We're using preference to override Above model and blocks,
Where (in some cases, it always depends on customization) we can also use Plugins and Virtual classes using Dependency
Injections which is Highly recommended.
add a comment |
For new storefront theme
Create a directory for the theme under
app/design/frontend/<your_vendor_name>/<your_theme_name>
.Add a declaration file theme.xml and optionally create etc directory
and create a file named view.xml to the theme directory.- Add a composer.json file.
- Add registration.php.
- Create directories for CSS, JavaScript, images, and fonts.
- Configure your theme in the Admin panel.
Create a theme directory
To create the directory for your theme:
Go to /app/design/frontend.
Create a new directory named according to your vendor name:
/app/design/frontend/.Under the directory, create a directory named according to
your theme.
app/design/frontend/
├── <Vendor>/
│ │ ├──...<theme>/
│ │ │ ├── ...
│ │ │ ├── ...
Create directories for static files
Your theme will likely contain several types of static files:
- Styles
- Fonts
- JavaScript
- Images
Each type should be stored in a separate sub-directory of web in your theme folder:
app/design/<area>/<Vendor>/<theme>/
├── web/
│ ├── css/
│ │ ├── source/
│ ├── fonts/
│ ├── images/
│ ├── js/
Your theme directory structure now
At this point your theme file structure looks as follows:
app/design/frontend/<Vendor>/
├── <theme>/
│ ├── etc/
│ │ ├── view.xml
│ ├── web/
│ │ ├── images
│ │ │ ├── logo.svg
│ ├── registration.php
│ ├── theme.xml
│ ├── composer.json
Recommended reading
- Theme
- Checklist of modules
- Static view files processing
For Block
Build directories just like above -
magento2 --- app --- code
|--- Sample --- HelloWorld
| --- Block
| --- etc
| --- module.xml
| --- di.xml
- Create module.xml to define a Magento 2 extension:
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/Module/etc/module.xsd">
<module name="Sample_HelloWorld" setup_version="0.0.1"/>
</config>
- Set preference in di.xml
Create di.xml to refer the overriding block class:
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/ObjectManager/etc/config.xsd">
<preference for="MagentoThemeBlockHtmlTitle" type="SampleHelloWorldBlockHelloTitle" />
</config>
- Define an overriding class
Define HelloTitle.php
under magento2/app/code/Sample/HelloWorld/Block
:
<?php
namespace SampleHelloWorldBlock;
use MagentoFrameworkViewElementTemplate;
class HelloTitle extends MagentoThemeBlockHtmlTitle
{
public function getPageTitle()
{
return 'haha9999';
}
protected function _toHtml()
{
$this->setModuleName($this->extractModuleName('MagentoThemeBlockHtmlTitle'));
return parent::_toHtml();
}
}
For Models
Create Directories
magento2 --- app --- code
|--- Sample --- HelloWorld
| --- etc
| --- Model
| --- Catalog
Configuration of Module
Create module.xml
in app/code/Sample/HelloWorld/etc
and add the following code in it:
<?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="Sample_HelloWorld" setup_version="1.0.1">
</module>
</config>
Override di.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<preference for="MagentoCatalogModelProduct" type="SampleHelloWorldModelCatalogProduct" />
</config>
Override Product.php
Now create Product.php
in app/code/Sample/HelloWorld/Model/Catalog
and add the following code in it.
<?php
namespace SampleHelloWorldModelCatalog;
class Product extends MagentoCatalogModelProduct
{
public function getName()
{
return $this->_getData(self::NAME) . ' + Demo Text';
}
public function getSku()
{
return "123-Demo";
}
}
Launch SSH and Run Commands
php bin/magento module:enable Magenticians_Moduleproduct
php bin/magento setup:upgrade
php bin/magento setup:di:compile
php bin/magento cache:clean
php bin/magento cache:flush
Note : We're using preference to override Above model and blocks,
Where (in some cases, it always depends on customization) we can also use Plugins and Virtual classes using Dependency
Injections which is Highly recommended.
add a comment |
For new storefront theme
Create a directory for the theme under
app/design/frontend/<your_vendor_name>/<your_theme_name>
.Add a declaration file theme.xml and optionally create etc directory
and create a file named view.xml to the theme directory.- Add a composer.json file.
- Add registration.php.
- Create directories for CSS, JavaScript, images, and fonts.
- Configure your theme in the Admin panel.
Create a theme directory
To create the directory for your theme:
Go to /app/design/frontend.
Create a new directory named according to your vendor name:
/app/design/frontend/.Under the directory, create a directory named according to
your theme.
app/design/frontend/
├── <Vendor>/
│ │ ├──...<theme>/
│ │ │ ├── ...
│ │ │ ├── ...
Create directories for static files
Your theme will likely contain several types of static files:
- Styles
- Fonts
- JavaScript
- Images
Each type should be stored in a separate sub-directory of web in your theme folder:
app/design/<area>/<Vendor>/<theme>/
├── web/
│ ├── css/
│ │ ├── source/
│ ├── fonts/
│ ├── images/
│ ├── js/
Your theme directory structure now
At this point your theme file structure looks as follows:
app/design/frontend/<Vendor>/
├── <theme>/
│ ├── etc/
│ │ ├── view.xml
│ ├── web/
│ │ ├── images
│ │ │ ├── logo.svg
│ ├── registration.php
│ ├── theme.xml
│ ├── composer.json
Recommended reading
- Theme
- Checklist of modules
- Static view files processing
For Block
Build directories just like above -
magento2 --- app --- code
|--- Sample --- HelloWorld
| --- Block
| --- etc
| --- module.xml
| --- di.xml
- Create module.xml to define a Magento 2 extension:
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/Module/etc/module.xsd">
<module name="Sample_HelloWorld" setup_version="0.0.1"/>
</config>
- Set preference in di.xml
Create di.xml to refer the overriding block class:
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/ObjectManager/etc/config.xsd">
<preference for="MagentoThemeBlockHtmlTitle" type="SampleHelloWorldBlockHelloTitle" />
</config>
- Define an overriding class
Define HelloTitle.php
under magento2/app/code/Sample/HelloWorld/Block
:
<?php
namespace SampleHelloWorldBlock;
use MagentoFrameworkViewElementTemplate;
class HelloTitle extends MagentoThemeBlockHtmlTitle
{
public function getPageTitle()
{
return 'haha9999';
}
protected function _toHtml()
{
$this->setModuleName($this->extractModuleName('MagentoThemeBlockHtmlTitle'));
return parent::_toHtml();
}
}
For Models
Create Directories
magento2 --- app --- code
|--- Sample --- HelloWorld
| --- etc
| --- Model
| --- Catalog
Configuration of Module
Create module.xml
in app/code/Sample/HelloWorld/etc
and add the following code in it:
<?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="Sample_HelloWorld" setup_version="1.0.1">
</module>
</config>
Override di.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<preference for="MagentoCatalogModelProduct" type="SampleHelloWorldModelCatalogProduct" />
</config>
Override Product.php
Now create Product.php
in app/code/Sample/HelloWorld/Model/Catalog
and add the following code in it.
<?php
namespace SampleHelloWorldModelCatalog;
class Product extends MagentoCatalogModelProduct
{
public function getName()
{
return $this->_getData(self::NAME) . ' + Demo Text';
}
public function getSku()
{
return "123-Demo";
}
}
Launch SSH and Run Commands
php bin/magento module:enable Magenticians_Moduleproduct
php bin/magento setup:upgrade
php bin/magento setup:di:compile
php bin/magento cache:clean
php bin/magento cache:flush
Note : We're using preference to override Above model and blocks,
Where (in some cases, it always depends on customization) we can also use Plugins and Virtual classes using Dependency
Injections which is Highly recommended.
For new storefront theme
Create a directory for the theme under
app/design/frontend/<your_vendor_name>/<your_theme_name>
.Add a declaration file theme.xml and optionally create etc directory
and create a file named view.xml to the theme directory.- Add a composer.json file.
- Add registration.php.
- Create directories for CSS, JavaScript, images, and fonts.
- Configure your theme in the Admin panel.
Create a theme directory
To create the directory for your theme:
Go to /app/design/frontend.
Create a new directory named according to your vendor name:
/app/design/frontend/.Under the directory, create a directory named according to
your theme.
app/design/frontend/
├── <Vendor>/
│ │ ├──...<theme>/
│ │ │ ├── ...
│ │ │ ├── ...
Create directories for static files
Your theme will likely contain several types of static files:
- Styles
- Fonts
- JavaScript
- Images
Each type should be stored in a separate sub-directory of web in your theme folder:
app/design/<area>/<Vendor>/<theme>/
├── web/
│ ├── css/
│ │ ├── source/
│ ├── fonts/
│ ├── images/
│ ├── js/
Your theme directory structure now
At this point your theme file structure looks as follows:
app/design/frontend/<Vendor>/
├── <theme>/
│ ├── etc/
│ │ ├── view.xml
│ ├── web/
│ │ ├── images
│ │ │ ├── logo.svg
│ ├── registration.php
│ ├── theme.xml
│ ├── composer.json
Recommended reading
- Theme
- Checklist of modules
- Static view files processing
For Block
Build directories just like above -
magento2 --- app --- code
|--- Sample --- HelloWorld
| --- Block
| --- etc
| --- module.xml
| --- di.xml
- Create module.xml to define a Magento 2 extension:
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/Module/etc/module.xsd">
<module name="Sample_HelloWorld" setup_version="0.0.1"/>
</config>
- Set preference in di.xml
Create di.xml to refer the overriding block class:
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/ObjectManager/etc/config.xsd">
<preference for="MagentoThemeBlockHtmlTitle" type="SampleHelloWorldBlockHelloTitle" />
</config>
- Define an overriding class
Define HelloTitle.php
under magento2/app/code/Sample/HelloWorld/Block
:
<?php
namespace SampleHelloWorldBlock;
use MagentoFrameworkViewElementTemplate;
class HelloTitle extends MagentoThemeBlockHtmlTitle
{
public function getPageTitle()
{
return 'haha9999';
}
protected function _toHtml()
{
$this->setModuleName($this->extractModuleName('MagentoThemeBlockHtmlTitle'));
return parent::_toHtml();
}
}
For Models
Create Directories
magento2 --- app --- code
|--- Sample --- HelloWorld
| --- etc
| --- Model
| --- Catalog
Configuration of Module
Create module.xml
in app/code/Sample/HelloWorld/etc
and add the following code in it:
<?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="Sample_HelloWorld" setup_version="1.0.1">
</module>
</config>
Override di.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<preference for="MagentoCatalogModelProduct" type="SampleHelloWorldModelCatalogProduct" />
</config>
Override Product.php
Now create Product.php
in app/code/Sample/HelloWorld/Model/Catalog
and add the following code in it.
<?php
namespace SampleHelloWorldModelCatalog;
class Product extends MagentoCatalogModelProduct
{
public function getName()
{
return $this->_getData(self::NAME) . ' + Demo Text';
}
public function getSku()
{
return "123-Demo";
}
}
Launch SSH and Run Commands
php bin/magento module:enable Magenticians_Moduleproduct
php bin/magento setup:upgrade
php bin/magento setup:di:compile
php bin/magento cache:clean
php bin/magento cache:flush
Note : We're using preference to override Above model and blocks,
Where (in some cases, it always depends on customization) we can also use Plugins and Virtual classes using Dependency
Injections which is Highly recommended.
answered yesterday
Aditya Shah
3,5932834
3,5932834
add a comment |
add a comment |
If you want to override block, controller, model ... files, then you have to create module.
If you want to change only template file then create theme and put your file in theme.
How to create custom module
https://www.magestore.com/magento-2-tutorial/magento-2-modules/
How to override block, controller, model
https://webkul.com/blog/overriding-rewriting-classes-magento2/
How to create custom theme
https://devdocs.magento.com/guides/v2.3/frontend-dev-guide/themes/theme-create.html
I hope this will help you.
add a comment |
If you want to override block, controller, model ... files, then you have to create module.
If you want to change only template file then create theme and put your file in theme.
How to create custom module
https://www.magestore.com/magento-2-tutorial/magento-2-modules/
How to override block, controller, model
https://webkul.com/blog/overriding-rewriting-classes-magento2/
How to create custom theme
https://devdocs.magento.com/guides/v2.3/frontend-dev-guide/themes/theme-create.html
I hope this will help you.
add a comment |
If you want to override block, controller, model ... files, then you have to create module.
If you want to change only template file then create theme and put your file in theme.
How to create custom module
https://www.magestore.com/magento-2-tutorial/magento-2-modules/
How to override block, controller, model
https://webkul.com/blog/overriding-rewriting-classes-magento2/
How to create custom theme
https://devdocs.magento.com/guides/v2.3/frontend-dev-guide/themes/theme-create.html
I hope this will help you.
If you want to override block, controller, model ... files, then you have to create module.
If you want to change only template file then create theme and put your file in theme.
How to create custom module
https://www.magestore.com/magento-2-tutorial/magento-2-modules/
How to override block, controller, model
https://webkul.com/blog/overriding-rewriting-classes-magento2/
How to create custom theme
https://devdocs.magento.com/guides/v2.3/frontend-dev-guide/themes/theme-create.html
I hope this will help you.
answered Dec 26 '18 at 7:22
user55548
19718
19718
add a comment |
add a comment |
One of the most common tasks for a Magento 2 developer is overriding a template.
In Magento 2, there are two main methods for overriding a template:
Theme file path
Layout Block Argument
The template path method is used when building a theme and the layout method is used when building a module. They are the simplest, most straightforward, and easiest to understand methods. You will almost always be using one of these two methods. For the very few times, these two methods are not available, you have two other methods to choose from:
Class preference
Plugin
1) Theme File Path
In Magento 2, themes can override any module’s or parent theme’s layout, template, or web (css, js, etc.) file simply by placing it in <theme_dir>/<Vendor>_<Module>/path/to/file
For example, If you want to override the template located at <theme_dir>/<Vendor>_<Module>/view/html/header.phtml
for the Magento_Theme module, you would place your template in <theme_dir>/Magento_Theme/templates/html/header.phtml.
There are several block definitions in Magento 2 that do not have the Vendor_Module prefix to specify which module the template belongs to. In these cases, the block’s class attribute will define what module the template belongs to. For example if you were to find a block definition in the Magento_Checkout module like this you would place your template inside the Magento_Checkout module directory inside your theme.
This Magento 2 devdoc on theme-inheritance goes into more detail on how to override a template in a theme.
2) Layout Block Argument
Module Creator
The layout method should be used when building a module. To override a template using layout XML, you only need to override the block’s template argument. Using the template Magento_Wishlist/view/frontend/templates/view.phtml
as an example, to override view.phtml with your own template, you first have to create a new layout file. <Vendor>_<Module>/view/frontend/layout/wishlist_index_index.xml
wishlist_index_index.xml
<?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="customer.wishlist">
<arguments>
<argument name="template" xsi:type="string">Vendor_Module::view.phtml</argument>
</arguments>
</referenceBlock>
</body>
</page>
Now you have to place your new custom template in the location you specified in your layout file. For this example, that is <Vendor>_<Module>/view/frontend/templates/view.phtml
add a comment |
One of the most common tasks for a Magento 2 developer is overriding a template.
In Magento 2, there are two main methods for overriding a template:
Theme file path
Layout Block Argument
The template path method is used when building a theme and the layout method is used when building a module. They are the simplest, most straightforward, and easiest to understand methods. You will almost always be using one of these two methods. For the very few times, these two methods are not available, you have two other methods to choose from:
Class preference
Plugin
1) Theme File Path
In Magento 2, themes can override any module’s or parent theme’s layout, template, or web (css, js, etc.) file simply by placing it in <theme_dir>/<Vendor>_<Module>/path/to/file
For example, If you want to override the template located at <theme_dir>/<Vendor>_<Module>/view/html/header.phtml
for the Magento_Theme module, you would place your template in <theme_dir>/Magento_Theme/templates/html/header.phtml.
There are several block definitions in Magento 2 that do not have the Vendor_Module prefix to specify which module the template belongs to. In these cases, the block’s class attribute will define what module the template belongs to. For example if you were to find a block definition in the Magento_Checkout module like this you would place your template inside the Magento_Checkout module directory inside your theme.
This Magento 2 devdoc on theme-inheritance goes into more detail on how to override a template in a theme.
2) Layout Block Argument
Module Creator
The layout method should be used when building a module. To override a template using layout XML, you only need to override the block’s template argument. Using the template Magento_Wishlist/view/frontend/templates/view.phtml
as an example, to override view.phtml with your own template, you first have to create a new layout file. <Vendor>_<Module>/view/frontend/layout/wishlist_index_index.xml
wishlist_index_index.xml
<?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="customer.wishlist">
<arguments>
<argument name="template" xsi:type="string">Vendor_Module::view.phtml</argument>
</arguments>
</referenceBlock>
</body>
</page>
Now you have to place your new custom template in the location you specified in your layout file. For this example, that is <Vendor>_<Module>/view/frontend/templates/view.phtml
add a comment |
One of the most common tasks for a Magento 2 developer is overriding a template.
In Magento 2, there are two main methods for overriding a template:
Theme file path
Layout Block Argument
The template path method is used when building a theme and the layout method is used when building a module. They are the simplest, most straightforward, and easiest to understand methods. You will almost always be using one of these two methods. For the very few times, these two methods are not available, you have two other methods to choose from:
Class preference
Plugin
1) Theme File Path
In Magento 2, themes can override any module’s or parent theme’s layout, template, or web (css, js, etc.) file simply by placing it in <theme_dir>/<Vendor>_<Module>/path/to/file
For example, If you want to override the template located at <theme_dir>/<Vendor>_<Module>/view/html/header.phtml
for the Magento_Theme module, you would place your template in <theme_dir>/Magento_Theme/templates/html/header.phtml.
There are several block definitions in Magento 2 that do not have the Vendor_Module prefix to specify which module the template belongs to. In these cases, the block’s class attribute will define what module the template belongs to. For example if you were to find a block definition in the Magento_Checkout module like this you would place your template inside the Magento_Checkout module directory inside your theme.
This Magento 2 devdoc on theme-inheritance goes into more detail on how to override a template in a theme.
2) Layout Block Argument
Module Creator
The layout method should be used when building a module. To override a template using layout XML, you only need to override the block’s template argument. Using the template Magento_Wishlist/view/frontend/templates/view.phtml
as an example, to override view.phtml with your own template, you first have to create a new layout file. <Vendor>_<Module>/view/frontend/layout/wishlist_index_index.xml
wishlist_index_index.xml
<?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="customer.wishlist">
<arguments>
<argument name="template" xsi:type="string">Vendor_Module::view.phtml</argument>
</arguments>
</referenceBlock>
</body>
</page>
Now you have to place your new custom template in the location you specified in your layout file. For this example, that is <Vendor>_<Module>/view/frontend/templates/view.phtml
One of the most common tasks for a Magento 2 developer is overriding a template.
In Magento 2, there are two main methods for overriding a template:
Theme file path
Layout Block Argument
The template path method is used when building a theme and the layout method is used when building a module. They are the simplest, most straightforward, and easiest to understand methods. You will almost always be using one of these two methods. For the very few times, these two methods are not available, you have two other methods to choose from:
Class preference
Plugin
1) Theme File Path
In Magento 2, themes can override any module’s or parent theme’s layout, template, or web (css, js, etc.) file simply by placing it in <theme_dir>/<Vendor>_<Module>/path/to/file
For example, If you want to override the template located at <theme_dir>/<Vendor>_<Module>/view/html/header.phtml
for the Magento_Theme module, you would place your template in <theme_dir>/Magento_Theme/templates/html/header.phtml.
There are several block definitions in Magento 2 that do not have the Vendor_Module prefix to specify which module the template belongs to. In these cases, the block’s class attribute will define what module the template belongs to. For example if you were to find a block definition in the Magento_Checkout module like this you would place your template inside the Magento_Checkout module directory inside your theme.
This Magento 2 devdoc on theme-inheritance goes into more detail on how to override a template in a theme.
2) Layout Block Argument
Module Creator
The layout method should be used when building a module. To override a template using layout XML, you only need to override the block’s template argument. Using the template Magento_Wishlist/view/frontend/templates/view.phtml
as an example, to override view.phtml with your own template, you first have to create a new layout file. <Vendor>_<Module>/view/frontend/layout/wishlist_index_index.xml
wishlist_index_index.xml
<?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="customer.wishlist">
<arguments>
<argument name="template" xsi:type="string">Vendor_Module::view.phtml</argument>
</arguments>
</referenceBlock>
</body>
</page>
Now you have to place your new custom template in the location you specified in your layout file. For this example, that is <Vendor>_<Module>/view/frontend/templates/view.phtml
answered yesterday
Sourav
1,109413
1,109413
add a comment |
add a comment |
Thanks for contributing an answer to Magento Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmagento.stackexchange.com%2fquestions%2f255777%2fbest-way-to-edit-default-files-apply-custom-application-in-magento-2-3%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
1
Still Looking Best Answer...
– zus
Dec 27 '18 at 5:49
Please check my answer
– Sourav
yesterday
Hello @zus, I recommend if you just want to modify output on minor customization I recommend Plugins for the same. Override via preference is for big customization not for small.
– Aditya Shah
yesterday