0

I am trying to override Block \Magento\Directory\Block\Data with following method getCountryHtmlSelect() with following script, but it's not executing.

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="Magento\Directory\Block\Data" type="Magenticians\Modulecontact\Block\Data" /> 
</config>

<?php

namespace Magenticians\Modulecontact\Block;

use Magento\Framework\View\Element\Template;

class Data extends \Magento\Directory\Block\Data
{

    public function getCountryHtmlSelect($defValue = null, $name = 'country_id', $id = 'country', $title = 'Country')
    {
        exit;
    }

    public function test()
    {
        exit;
    }
?>
1
  • Can you tell me where is your di.xml file avilable? Jan 22, 2018 at 12:35

1 Answer 1

1

Seems your class has no closing brace. It can cause an error. Additional do not forget to clean cache and remove all files in the var/generation or generated directory (from Magento root) or just run bin/magento setup:di:compile.

You can check the code using next script in the root of Magento:

Create file testsomething.php:

<?php
use Magento\Framework\App\Bootstrap;
require __DIR__ . '/app/bootstrap.php';

$bootstrap = Bootstrap::create(BP, $_SERVER);

$obj = $bootstrap->getObjectManager();

$state = $obj->get('Magento\Framework\App\State');
$state->setAreaCode('frontend');

$block = $obj->get('\Magento\Directory\Block\Data');
echo get_class($block);

How can I bootstrap Magento 2 in a test.php script?

Open this file in the browser (http://yormagentohost.com/testsomething.php). Result should looks like this:

Magenticians\Modulecontact\Block\Data

I tested this code locally and for me it works fine.

6
  • i done all things and i am able to override different block classes expect this
    – Ramesh
    Jan 22, 2018 at 12:37
  • Maybe some other module overwriten this class too? Check what is returned by a `get_class' function in the template or somewhere else where you can access the block object. I'll update my answer. Jan 22, 2018 at 12:55
  • your code is useful, it showing my overrider class but method not applying
    – Ramesh
    Jan 22, 2018 at 13:42
  • @Ramesh where you checking the overwriten class on the frontend? Jan 22, 2018 at 13:47
  • @sergey..yes on fontend
    – Ramesh
    Jan 22, 2018 at 15:33

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.