The answer is probably out there as a combination of several posts but I am not very good at Magento yet so I have to ask anyway:
I would like to have the topLinks inserted into a cms page.
I tried <?php echo $this->getChildHtml('topLinks') ?> but that does not work, it just shows the code as text on the page.
I tried {{block type="core/template" name="top.Links" as="topLinks" template="page/template/links.phtml"}} but nothing shows up.
I did successfully add the search form to the cms page with {{block type="core/template" name="top.search" as="topSearch" template="catalogsearch/form.mini.phtml"}} so I figured I probably just have the block type wrong or something.
What did I do wrong?
TL;DR: Well...You can't.
Why?:The topLinks block is a "container" block of type page/template_links. This is just added in the layout, but other layout handles or blocks add links to it. For example this part of xml in the customer.xml layout file
<reference name="top.links">
<action method="addLink" translate="label title" module="customer"><label>My Account</label><url helper="customer/getAccountUrl"/><title>My Account</title><prepare/><urlParams/><position>10</position></action>
</reference>
adds the My account link to it. There are others.
In conclusion the topLinks block does not have meaning on it's own. It is just a placeholder that can e modified by other blocks.
When a cms page is rendered the layout is already loaded parsed, so the block you add cannot be modified anymore by other blocks or layout files.
You can hardcode put top links in your cms pages like this..
<ul id="nav">
<li class="level0 parent"><span>My Account</span></li>
<li class="level0 parent"><span>My Wishlist</span></li>
<li class="level0 parent"><span>My Cart</span></li>
<li class="level0 parent"><span>Checkout</span></li>
<li class="level0 parent"><span>Log In</span></li>
</ul>
#Marius Thanks, I learned something new there. I am still struggling with understanding the intricate details of Magento's structure but I'm working on it.
#chirag I tried that but php does not work directly in cms pages so it tries to link to http://mymagentopage/<?php echo $this->getUrl('customer/account')?>. I can of course link directly to http://mymagentopage/customer/account but for a few links I would miss functionality:
"Login" changing to "Logout" when logged in and logging the customer out instead of going to the account screen.
"Cart" changing to "Cart(2)" when product is added to the cart.
etc (I don't use wishlist)
Is there a way to regain this functionality?
I found this snippet that does it but it's php which won't work in cms pages:
<?php if (Mage::getSingleton('customer/session')->isLoggedIn()==0): ?>
<?php echo $this->__('Log In') ?>
<?php else: ?>
<?php echo $this->__('Log Out') ?>
<?php endif ?>I would also be happy with a solution to enable me to use php in cms pages, I am the only admin anyway.
EDIT
I found a working solution:
I created a new phtml file containing the above mentioned snippet. I created a new folder 'customphp' in my template folder and saved it there as test.phtml.
In the cms page I added a block: {{block type="core/template" name="whatever_unique-name-i-want" template="customphp/test.phtml"}}
Tada!
This is where I got the idea: http://www.magentocommerce.com/boards/viewthread/439880/
Related
I have added some custom header/footer phtml files to my Magento installation, the footer uses an static block called 'Footer Links' - this is a HTML block added via the Magento 'CMS' section.
It is possible to have some logic which 'hides' or disables this block on any checkout page?
One way to do it would be via the local.xml in /app/design/frontend/yourpackagename/yourthemename/layout/local.xml. The handles that you need to add depend on how your checkout process is configured. Here is some example code to get you started:
<checkout_cart_index>
<remove name="footer">
</checkout_cart_index>
<checkout_onepage_index>
<remove name="footer">
</checkout_onepage_index>
This is removing the entire footer block, but you can use it to remove any block name that you have. Alan Storms layoutviewer module is great for figuring out what the layout handles are: http://alanstorm.com/layouts_blocks_and_templates.
Hi i have a custom code to disable the footer links block in checkout page add this code in footer.phtml file
<?php $page_route=Mage::app()->getRequest()->getRouteName(); ?>
<?php if($page_route !='checkout'){ ?>
<?php echo $this->getLayout()->createBlock('cms/block')->setBlockId('footer_links')->toHtml() ?>
<?php } ?>
And comment or remove this code in cms.xml file
<block type="cms/block" name="cms_footer_links" before="footer_links">
<action method="setBlockId"><block_id>footer_links</block_id></action>
</block>
I want to move Add to cart button from view.phtml file to 2columns-right.phtml file and I am cant make it work. What I did is that I copied <?php echo $this->getChildHtml('addtocart') ?> from view.phtml file to 2columns-right.phtml and it does not appear at all. I did Flush Magento cache too but nothing again.
Any suggestions on how to make this work?
You should get familiar with magento layout system. To make possible <?php echo $this->getChildHtml('addtocart') ?> work in 2columns-right.phtml this block should be declared as child block of root block (the root is the block that is rendered with 2columns-right.phtml). Actually, I don't see much sense in moving add to cart to other template, because addtocart.phtml itself is just a button that submits whole form that is located at catalog/product/view.phtml. If you take it out of there it won't work.
First of all i agree with nevermourn you can not get childhtml if you havn't declared it. But you can use
<?php echo $this->getLayout()->createBlock('catalog/product_view')->setTemplate('catalog/product/view/addtocart.phtml')->toHtml(); ?>
By using this in 2columns-right.phtml you will get addtocart.phtml for sure.
in order to call add to cart button by using
<?php echo $this->getChildHtml('addtocart') ?>
on the page you desire in layout/local.xml
<yourModule_YourController_yourAction>
<reference name="content">
<block type="catalog/product_view" name="product.info.addtocart" as="addtocart" template="catalog/product/view/addtocart.phtml"/>
</reference>
</yourModule_YourController_yourAction>
Catalog.xml
<default>
<!-- Mage_Catalog -->
<reference name="top.menu">
<block type="catalog/navigation" name="catalog.topnav" template="catalog/navigation/top.phtml">
<block type="catalog/navigation" name="topnav_extra" template="catalog/navigation/top_extra.phtml" />
</block>
</reference>
top_extra.phtml
<ul>
<li> Custom Menu1 </li>
<li> Custom Menu2 </li>
</ul>
top.phtml
<?php if($_menu): ?>
<ul id="topnav">
<?php echo $_menu ?>
<!-- Header Menu laset tab start here -->
<?php echo $this->getChildHtml('topnav_extra'); ?>
</ul>
This block is not showing sometimes when i refreshing twice or thrice it's coming. I am doing reindexing and cache refreshing on daily using cron. But i dont know why its coming randomly?
That sounds like a caching issue to me. Try calling your custom menu via PHP instead of XML
<?php echo $this->getLayout()->createBlock('cms/block')->setBlockId('block_id')- >toHtml(); ?>
This will alleviate any issues you might encounter using the XML files. Hope this helps!
<?php echo $this->getLayout()->createBlock('core/template')->setTemplate('catalog/navigation/top_extra.phtml')->toHtml(); ?>
i include that file with out layout handles. I am not sure is the right way to do this? but its showing up. I put log to know how many times its not showing up.. Will see
I want to get rid of the links in the footer of my website, someone started the dev of that website and left, now I can't modify it, because when I'm in the footer.phtml i can see that code :
<!-- Footer -->
<div id="footer">
<ul>
<li><?php echo $this->getCopyright(); ?></li>
</ul>
<?php echo Mage::getModel('core/variable')->loadByCode('footer_navigation')->getValue('html'); ?>
<div class="cl"> </div>
</div>
<!-- /Footer -->
I can't find the place where that class is looking for the links Mage::getModel('core/variable')->loadByCode('footer_navigation')->getValue('html')
I've been looking in catalog.xml where I found <reference name="footer_links"> but if I delet the code inside, nothing happen, it doesn't seem to be linked in any way with that.
I got the same problem in my menu where I see that class I don't understand : $categories = $this->renderCategoriesMenuHtmlCustom2(0, 'level-top'); Where does that refer too ?
Thanks :)
Login to your admin panel and go to System->Custom Variables. You should find the footer links there. You can remove the links through here (by deleting the HTML and plain-text fields), or by taking out the piece of code that loads the footer links variable (the line that calls loadByCode('footer_navigation')).
You can also delete the variable through the admin panel, but if you do this, you should also remove the code that calls it; it won't crash, but it can lead to confusion down the road.
I'm looking to show the most recent reviews for a product (maybe 3 or 4) in the sidebar on that products page in magento.
Showing the first 10 or 15 words of the review, the star bar and a link to the reviews page to see all the reviews..
any advice or pointers greatly appreciated,
Thanks,
Johnny
As ElGabby said, creating a extension would be the way to go.
But you can do this by editing your current layout.
Go to the file catalog.xml in /app/design/frontend/default/[your theme]/layout/ or /app/design/frontend/base/[your theme]/layout/
find the section:
<catalog_product_view>
in there you proberly have a section like:
<reference name="right">
in that section add:
<block type="review/product_view" name="right.rewiev" template="review/rightbar.phtml" />
the section in my example look like this:
<reference name="right">
<block type="review/product_view" name="right.rewiev" template="review/rightbar.phtml" />
<block type="catalog/product_list_related" name="catalog.product.related" before="-" template="catalog/product/list/related.phtml"/>
</reference>
save the file and create a new file in:
/app/design/frontend/default/[your theme]/design/review/rightbar.phtml
content of that file would be something like:
<?php $collection = $this->getReviewsCollection(); ?>
<?php if(count($collection) > 0):?>
<?php foreach ($collection as $rating):?>
<?php echo $rating->title //title of the rewiev?>
<?php echo $rating->detail //content of the rewiev?>
<?php echo $rating->created_at //data rewiev is created?>
<?php endforeach;?>
<?php endif;?>
I would create an extension.
Using layout.xml place your block that should extend core/template block in left/right sidebar of the product page
Within that block class you should have methods that will retrieve from the database the reviews you wish to display. So say for instance you would need a method getReviews()
In the template call $this->getReviews() and iterate the result and display the reviews as you would like. The star bar might be a bit of a hassle but if you look at other template files where they are used you should be able to get the gist of it :)
HTH :)