2011-01-02 20 views
6

के बाहर Magento बच्चे एचटीएमएल लोड हो रहा है मैं अपनी साइट के कुछ हिस्सों के लिए Magento के बाहर Magento ब्लॉक लोड कर रहा हूँ। मैं इसे निम्नलिखित के साथ सफलतापूर्वक कर सकता हूं।Magento

require_once $docRoot.'/app/Mage.php'; 
umask(0); 
Mage::app('default'); 
... 

$layout = Mage::getSingleton('core/layout'); 
$block = $layout->createBlock('Mage_Page_Block_Html_Header'); 
$block->setTemplate('page/html/header.phtml'); 
echo $block->renderView(); 

समस्या यह है कि अगर मेरे द्वारा प्रस्तुत किए जा रहे ब्लॉक में बच्चे ब्लॉक (एचटीएमएल) हैं तो वे आउटपुट में शामिल नहीं हैं। फ़ाइल हेडर.एफटीएमएल के ऊपर दिए गए उदाहरण में आउटपुट से अनुपलब्ध बाल HTML के लिए निम्न कॉल शामिल है।

... 
<?php echo $this->getChildHtml('topLinks') ?> 
... 
+0

मेरे लिए ऐसा लगता है कि एलन बहुत अच्छी तरह से सवाल का जवाब दे। हो सकता है कि जिस तरह से आप चाहते थे उस समस्या को हल नहीं किया हो, लेकिन मेरा सुझाव है कि आप इसे सही के रूप में चिह्नित करें, जब तक इसमें कोई त्रुटि न हो जो मुझे नहीं दिखाई दे। – shaune

+0

यदि आप इसके बाहर magento के हेडर और पाद लेख को शामिल करना चाहते हैं, तो उदाहरण के लिए तीसरे पक्ष के सीएमएस/एप्लिकेशन के लिए कहें तो आप निम्न आलेख का पालन कर सकते हैं:
http://www.blog.magepsycho.com/using -मैगेंटो-हेडर-फ़ूटर-आउट-ऑफ-मैजेंटो/हैप्पी ई-कॉमर्स !! – MagePsycho

उत्तर

12

एक लेआउट ऑब्जेक्ट ब्लॉक ऑब्जेक्ट्स का संग्रह है। ब्लॉक माता-पिता/बाल पेड़ के रूप में व्यवस्थित होते हैं।

आपके लेआउट में एक ही ब्लॉक है। आपने इसमें कोई भी बाल ब्लॉक नहीं जोड़ा है। इसलिए, जब आपका ब्लॉक का टेम्पलेट getChildHtml के साथ बच्चे को प्रस्तुत करने का प्रयास करता है, तो उसे कोई नहीं मिल सकता है, और कोई अतिरिक्त आउटपुट नहीं बनाया जाता है।

इसके अतिरिक्त, डिफ़ॉल्ट रूप से शीर्ष लिंक ब्लॉक, कुछ भी प्रस्तुत नहीं करता है। इसमें लिंक जोड़ने की जरूरत है। यह आमतौर पर अन्य लेआउट.एक्सएमएल फाइलों के माध्यम से किया जाता है।

अंत में, यह शायद बेहतर

echo $block_header->toHtml(); 

नीचे के लिए एक कॉल के साथ प्रतिपादन शुरू करने के लिए कर रहा है कि कैसे आप घोंसला ब्लॉक सही ढंग से, साथ ही फोन उनकी कार्रवाई के तरीकों, ऐसा है कि आप हो जाएगा कर सकते हैं का एक उदाहरण है सामान्य प्रेषण प्रक्रिया के बाहर अपने ब्लॉक प्रस्तुत करने में सक्षम। यह आपके से अलग है कि हम एक नया लिंक ब्लॉक बनाते हैं, इसमें एक लिंक जोड़ते हैं, और इसे अपने शीर्ष स्तर के ब्लॉक में जोड़ते हैं।

require_once 'app/Mage.php'; 
umask(0); 
Mage::app('default'); 

$layout   = Mage::getSingleton('core/layout'); 

$block_header = $layout->createBlock('page/html_header')->setTemplate('page/html/header.phtml'); 

// <block type="" name="top.links" as="topLinks"/> 
$block_links = $layout->createBlock('page/template_links','top.links')->setTemplate('page/template/links.phtml'); 
$block_header->setChild('topLinks',$block_links); 

//<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> 
$block_links->addLink('My Account','foo/baz/bar/','My Account','','',10); 

echo $block_header->toHtml(); 
+0

धन्यवाद यह बहुत उपयोगी था –

+0

एलन यह "पृथक" चलाने लगता है। मैंने test.php नामक एक फाइल बनाई और इसे चलाया। जहां मेरे टेम्पलेट्स में यह $ था-> getUrl ('') ने इसे BASE_URL के रूप में प्रस्तुत किया। /test.php/। Magento के लेआउट xml के माध्यम से ऐसा करने का कोई तरीका है ताकि आपको बच्चों को मैन्युअल रूप से जोड़ने की आवश्यकता न हो? – JaseC

+0

@ जेसेसी मुझे समझ में नहीं आता कि आप क्या पूछ रहे हैं। आपकी टिप्पणी की तरह लगता है एक नए सवाल के रूप में बेहतर होगा। –

2

लिंक नीचे एक एलन का उल्लेख किया है, हालांकि यह अन्य ब्लॉकों जो जे एस फ़ाइलें और सीएसएस हो सकती जोड़ दिया जाता है की तरह कुछ हद तक एक समान दृष्टिकोण प्रदान करता है। तुम भी यह बाहर की जाँच की कोशिश करना चाहते हैं हो सकता है:

How to add Magento blocks, CSS and Javascript to an external site

0
# Init Magento 
require_once 'app/Mage.php'; 
umask(0); 

$app = Mage::app('default'); 

$app->getTranslator()->init('frontend'); 

# Init User Session 
session_name('frontend'); 
$session = Mage::getSingleton('customer/session'); 

# Init Blocks 
$linksBlock = $app->getLayout()->getBlockSingleton("page/template_links"); 

$checkoutLinksBlock = $app->getLayout()->getBlockSingleton("checkout/links"); 
$checkoutLinksBlock->setParentBlock($linksBlock); 

$wishlistLinksBlock = $app->getLayout()->getBlockSingleton('wishlist/links'); 
$wishlistLinksBlock->setParentBlock($linksBlock); 

# Add Links 
$linksBlock->addLink($linksBlock->__('My Account'), 'customer/account', $linksBlock->__('My Account'), true, array(), 10, 'class="first"'); 
$wishlistLinksBlock->addWishlistLink(); 
$checkoutLinksBlock->addCartLink(); 
$checkoutLinksBlock->addCheckoutLink(); 

if ($session->isLoggedIn()) { 
    $linksBlock->addLink($linksBlock->__('Log Out'), 'customer/account/logout', $linksBlock->__('Log Out'), true, array(), 100, 'class="last"'); 
} else { 
    $linksBlock->addLink($linksBlock->__('Log In'), 'customer/account/login', $linksBlock->__('Log In'), true, array(), 100, 'class="last"'); 
} 

echo '<div class="toplinks">'.$linksBlock->renderView().'</div>'; 
+1

क्या आप कोड की दीवार की बजाय कुछ स्पष्टीकरण प्रदान कर सकते हैं? –

+0

इस कोड से आप केवल हेडर में toplinks ब्लॉक प्राप्त कर सकते हैं। –