Trying to create a custom block in purple

I am new to stackoverflow, but I will be very open with my doubts and questions that I want to ask.

I am trying to create a custom block in magento. I am new to magento and am learning it to become an advanced magento developer.

I have tried the following things:

  • I created the Magentotutorial reference in magento / app / code / local / Magentotutorial.

  • I created a basic structure in it, which are five directories in the Magentotutorial. So the location is magento / app / code / local / Magentotutorial / World

Directories:

magento/app/code/local/Magentotutorial/World/controllers, magento/app/code/local/Magentotutorial/World/sql, magento/app/code/local/Magentotutorial/World/Model, magento/app/code/local/Magentotutorial/World/Helper, magento/app/code/local/Magentotutorial/World/Block, magento/app/code/local/Magentotutorial/World/etc. 
  1. My config.xml goes to magento/app/code/local/Magentotutorial/World/etc/config.xml file

config.xml contains the following code:

 <?xml version="1.0" encoding="UTF-8"?> <config> <modules> <Magentotutorial_World> <version>0.1.0</version> </Magentotutorial_World> </modules> <global> <blocks> <Magentotutorial_World> <class>Magentotutorial_World_Block</class> </Magentotutorial_World> </blocks> </global> <frontend> <layout> <updates> <Magentotutorial_World> <file>test.xml</file> </Magentotutorial_World> </updates> </layout> </frontend> </config> 

To activate my module in magento, I created an xml file.

Magentotutorial_World.xml:

 <?xml version="1.0" encoding="UTF-8"?> <config> <modules> <Magentotutorial_World> <active>true</active> <codePool>local</codePool> </Magentotutorial_World> </modules> </config> 
  1. In my block directory, which is located in magento/app/code/local/Magentotutorial/World/Block I created a file called example.php

example.php has the following code:

 <?php class Magentotutorial_World_Block_Example extends Mage_Core_Block_Template { } 

5. Now I have a layout and a template in my magento directory in magento/app/design/frontend/rwd/default/layout In my layout file I made a test.xml file that has the following code:

 <?xml version="1.0" encoding="UTF-8"?> <layout> <default> <block type="magentotutorial_world/example" name="newreferenceBlock" template="test/example.phtml" /> </default> </layout> 
  1. I made the example.phtml file in the test folder, which is located at the location magento / app / design / frontend / rwd / default / template / test / example.phtml

example.phtml has the following code:

 <html> <body> <h1 style="background-color:yellow">Hello New Reference!</h1> </body> </html> 
  1. Now in page.xml I put this code

     <default translate="label" module="page"> <label>All Pages</label> <block type="page/html" name="root" output="toHtml" template="page/3columns.phtml"> <block type="magentotutorial_world/example" output="toHtml" name="newReferenceBlock" template="test/example.phtml" /> <block type="page/html_head" name="head" as="head"> <action method="addJs"><script>prototype/prototype.js</script></action> <action method="addJs"><script>lib/ccard.js</script></action> <action method="addJs"><script>prototype/validation.js</script></action> <action method="addJs"><script>scriptaculous/builder.js</script></action> <action method="addJs"><script>scriptaculous/effects.js</script></action> <action method="addJs"><script>scriptaculous/dragdrop.js</script></action> <action method="addJs"><script>scriptaculous/controls.js</script></action> <action method="addJs"><script>scriptaculous/slider.js</script></action> <action method="addJs"><script>varien/js.js</script></action> <action method="addJs"><script>varien/form.js</script></action> <action method="addJs"><script>mage/translate.js</script></action> <action method="addJs"><script>mage/cookies.js</script></action> 

Here I released my code

 <block type="magentotutorial_world/example" output="toHtml" name="newReferenceBlock" template="test/example.phtml" /> 
  1. Now I want to display this template in any layout of my page. I tried this for the 2columns-right.phtml file.

in this file I used getChildHtml.

 <div class="col-left sidebar"><?php echo $this->getChildHtml('newreferenceBlock'); ?></div> 

Whole file

 <?php /** * Magento * * NOTICE OF LICENSE * * This source file is subject to the Academic Free License (AFL 3.0) * that is bundled with this package in the file LICENSE_AFL.txt. * It is also available through the world-wide-web at this URL: * http://opensource.org/licenses/afl-3.0.php * If you did not receive a copy of the license and are unable to * obtain it through the world-wide-web, please send an email * to license@magentocommerce.com so we can send you a copy immediately. * * DISCLAIMER * * Do not edit or add to this file if you wish to upgrade Magento to newer * versions in the future. If you wish to customize Magento for your * needs please refer to http://www.magentocommerce.com for more information. * * @category design * @package rwd_default * @copyright Copyright (c) 2014 Magento Inc. (http://www.magentocommerce.com) * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) */ ?> <?php /** * Template for Mage_Page_Block_Html */ ?> <!DOCTYPE html> <!--[if lt IE 7 ]> <html lang="en" id="top" class="no-js ie6"> <![endif]--> <!--[if IE 7 ]> <html lang="en" id="top" class="no-js ie7"> <![endif]--> <!--[if IE 8 ]> <html lang="en" id="top" class="no-js ie8"> <![endif]--> <!--[if IE 9 ]> <html lang="en" id="top" class="no-js ie9"> <![endif]--> <!--[if (gt IE 9)|!(IE)]><!--> <html lang="en" id="top" class="no-js"> <!--<![endif]--> <head> <?php echo $this->getChildHtml('head') ?> </head> <body<?php echo $this->getBodyClass()?' class="'.$this->getBodyClass().'"':'' ?>> <?php echo $this->getChildHtml('after_body_start') ?> <div class="wrapper"> <?php echo $this->getChildHtml('global_notices') ?> <div class="page"> <?php echo $this->getChildHtml('header') ?> <div class="main-container col2-left-layout"> <div class="main"> <?php echo $this->getChildHtml('breadcrumbs') ?> <?php // This left_first block will display above the main content on smaller viewports ?> <?php if ($_leftContent = $this->getChildHtml('left_first')): ?> <div class="col-left sidebar col-left-first"><?php echo $_leftContent; ?></div> <?php endif; ?> <div class="col-main"> <?php echo $this->getChildHtml('global_messages') ?> <?php echo $this->getChildHtml('content') ?> </div> <div class="col-left sidebar"><?php echo $this->getChildHtml('left') ?></div> </div> <div class="col-left sidebar"><?php echo $this->getChildHtml('newreferenceBlock') ?></div> </div> <?php echo $this->getChildHtml('footer_before') ?> <?php echo $this->getChildHtml('footer') ?> <?php echo $this->getChildHtml('global_cookie_notice') ?> <?php echo $this->getChildHtml('before_body_end') ?> </div> </div> <?php echo $this->getAbsoluteFooter() ?> </body> </html> 

Now I can not make this block on any of my pages. Basically, I want to add this template to my index page.

What happens to my code? I also want to know that my block type = "magentotutorial_world" is right?

What if I want to revert changes to my test.xml file and want to make changes to my page.xml file. How to do it?

Please help me.

Thank you and welcome.

+5
source share
2 answers

You mistakenly configured the block in magento/app/code/local/Magentotutorial/World/etc/config.xml . Change Magentotutorial_World to lower Magentotutorial_World :

 <?xml version="1.0" encoding="UTF-8"?> <config> <modules> <Magentotutorial_World> <version>0.1.0</version> </Magentotutorial_World> </modules> <global> <blocks> <magentotutorial_world> <class>Magentotutorial_World_Block</class> </magentotutorial_world> </blocks> </global> <frontend> <layout> <updates> <Magentotutorial_World> <file>test.xml</file> </Magentotutorial_World> </updates> </layout> </frontend> </config> 
+2
source

I think your block type should be

<block type="world/example" output="toHtml" name="newReferenceBlock" template="test/example.phtml" />

Correct me if I am wrong.

0
source

Source: https://habr.com/ru/post/1202148/


All Articles