2012-09-12 60 views
5

मैं वास्तव में सेटअप स्क्रिप्ट के माध्यम से एक श्रेणी जोड़ सकता हूं, बात किसी कारण से कुछ फ़ील्ड ठीक से सेट नहीं होती है। यहाँ मेरी कोडसेटअप स्क्रिप्ट के माध्यम से Magento में कोई श्रेणी कैसे जोड़ें?

$this->startSetup(); 
Mage::register('isSecureArea', 1); 

$category = Mage::getModel('catalog/category'); 
$category->setPath('1/2') // set parent to be root category 
    ->setName('Category Name') 
    ->setUrlKey('category-name') 
    ->setIsActive(0) 
    ->setIncludeInMenu(1) 
    ->setInfinitescroll(1) 
    ->setDisplayMode('PAGE') 
    ->setLandingPage($idToCmsBlock) 
    ->setPageLayout('anotherLayoutThanDefault') 
    ->setCustomUseParentSettings(0) 
    ->setCustomLayoutUpdate('<reference name="head"><action method="addCss"><stylesheet>css/somecss.css</stylesheet></action></reference>') 
->save(); 
$this->endSetup(); 

इस स्क्रिप्ट चलाने के बाद, मैं एक वर्ग मेरे सारे मूल्य EAVS तालिका में सेट के साथ बनाया है। हालांकि फ्लैट तालिका में डिस्प्ले मोड, लैंडिंग पेज, पेजआउट, कस्टम लेआउट अपडेट होगा, भले ही मैं फ्लैट टेबल को फिर से अनुक्रमित करता हूं।

अजीब बात यह है कि अगर मैं व्यवस्थापक में जाता हूं, तो मैं उन सभी क्षेत्रों को सही ढंग से सेट कर सकता हूं लेकिन यदि मैं अपने अग्रभाग में जाता हूं तो अधिकांश क्षेत्रों को अनदेखा कर दिया जाता है। मुझे व्यवस्थापक पर जाना होगा, उन मानों को अनसेट करें और उनमें से प्रत्येक के लिए ठीक से काम करने के लिए उन्हें रीसेट करें।

यह भी कहना है कि मैं setEnabled (1) का उपयोग करता हूं, मेरी श्रेणी व्यवस्थापक में "सक्षम" होगी लेकिन फ्रंटेंड में दिखाई नहीं देगी।

पीएस: मेरे पास फ्लैट श्रेणी सक्रिय है, अगर मैं अक्षम करता हूं तो यह ठीक काम करता प्रतीत होता है लेकिन अगर मैं फिर से अनुक्रमित करता हूं तो यह अभी भी काम नहीं कर रहा है।

+0

अब तक मुझे लगता है कि मैं यह पता लगाने में सक्षम था कि यह फ्लैट टेबल से संबंधित था। अगर मैं उन्हें अक्षम करता हूं तो मेरी श्रेणियां ठीक से काम कर रही हैं। – zzarbi

उत्तर

9

मैं अंत में यह पाया, मुझे यकीन है कि नहीं कर रहा हूँ क्यों, लेकिन उन क्षेत्रों ठीक से दिखाई नहीं दे रहे हैं, क्योंकि वे के लिए डाला गया डिफ़ॉल्ट स्टोर (storeId = 1) क्योंकि मेरी स्क्रिप्ट एक अद्यतन स्क्रिप्ट में चल रही है। आप storeId उपयोग करने के लिए 0.

इस जानकारी के साथ की जरूरत है आप सोच सकता है कि समाधान की तरह कुछ होगा:

$this->startSetup(); 
Mage::register('isSecureArea', 1); 

Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID); 

$category = Mage::getModel('catalog/category'); 
$category->setPath('1/2') // set parent to be root category 
    ->setStoreId(Mage_Core_Model_App::ADMIN_STORE_ID) 
    ->setName('Category Name') 
    ... 
    ->save(); 
$this->endSetup(); 

लेकिन इस कोड या तो काम नहीं करता। वास्तव में Mage :: ऐप() (Mage_Core_Model_App लाइन 804) में देखने के बाद मैंने एक आईएफ शर्त देखी जो हमेशा एक डिफ़ॉल्ट स्क्रिप्ट को वापस कर देगा यदि आप एक स्क्रिप्ट स्क्रिप्ट में हैं।

चाल है कि आप एक सेटअप लिपि में नहीं कर रहे हैं नकली है, मेरे कार्य हल है:

$this->startSetup(); 
Mage::register('isSecureArea', 1); 

// Force the store to be admin 
Mage::app()->setUpdateMode(false); 
Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID); 

$category = Mage::getModel('catalog/category'); 
$category->setPath('1/2') // set parent to be root category 
    ->setStoreId(Mage_Core_Model_App::ADMIN_STORE_ID) 
    ->setName('Category Name') 
    ... 
    ->save(); 
$this->endSetup(); 
+4

ऐसा इसलिए है क्योंकि आप किसी डेटा-अपग्रेड स्क्रिप्ट के अंदर एक अपग्रेड स्क्रिप्ट का उपयोग कर रहे हैं (एक श्रेणी बनाना डीएमएल डीडीएल नहीं है)। यदि आप डेटा इंस्टॉलर का उपयोग कर रहे हैं तो आपको उस हैक की आवश्यकता नहीं है – Enrique

+0

यह दिलचस्प है! मुझे इस पर गौर करना होगा। – zzarbi

+0

वाह, आपने मेरी समस्या हल की। बहुत बहुत धन्यवाद :) – zuzuleinen

-1

इस पर एक नज़र डालें। आशा है इससे आपकी मदद होगी।
http://inchoo.net/ecommerce/magento/how-to-add-new-custom-category-attribute-in-magento/

+0

यह श्रेणी – zzarbi

+0

ओप्स में एक कस्टम विशेषता जोड़ने के लिए है। मेरी गलती। यह एक होना चाहिए। http://www.sonassi.com/knowledge-base/quick-script-batch-create-magento-categories/ –

+0

मैंने भी कोशिश की, और मेरे पास भी यही प्रभाव है। असल में मैं तर्क नियंत्रक से तर्क को कॉपी/पेस्ट करता हूं जो श्रेणियों को सहेजता है और यह अभी भी काम नहीं करता है। – zzarbi

1

इस

<?php 
require_once "../app/Mage.php"; 
umask(0); 
Mage::app('default'); 
$proxy = new SoapClient("http://127.0.0.1/magento/index.php/api/soap/?wsdl"); 
$sessionId = $proxy->login($magento_webservices_username, $magento_webservices_passwd); 

$data = array('name'=>'Nokia', 
      'description'=>'', 
      'meta_description'=>'', 
      'meta_keywords'=>'', 
      'default_sort_by'=>'price', 
      'available_sort_by'=>'price', 
      'is_active'=>1 
); 
$newCategoryId = $proxy->call($sessionId, 'category.create', array(3, $data, 1)); 
echo "Category ID: ".$newCategoryId; 

?> 

प्रयास करें और यह भी एक नजर है Magento create category

+0

हाँ मैं Magento SOAP API का उपयोग कर सकता हूं लेकिन मुझे पसंद नहीं है। – zzarbi

9

मैं जब स्क्रिप्ट स्थापित एक डेटा के माध्यम से एक वर्ग को अद्यतन करने के लिए एक ही मुद्दे में भाग गया। accepted answer में प्रदान की समाधान श्रेणी को अद्यतन करने के लिए काम किया था, लेकिन पर सुधार किया जा सकता है इस प्रकार है:

  • समाधान में, उपयोगकर्ता से चलाता है कि अद्यतन स्क्रिप्ट व्यवस्थापक पर्यावरण के लिए मजबूर किया जाता है। वर्तमान स्टोर आईडी को सहेजकर और स्क्रिप्ट के अंत में वापस स्विच करके इसका उपचार किया जा सकता है।
  • ऐसा लगता है कि रजिस्ट्री में SecureArea जोड़ने या अद्यतन मोड को अक्षम करने का कोई उपयोग नहीं था (कम से कम एक श्रेणी को अद्यतन करने के उपयोग के मामले में)।

मैं एक वर्ग को अद्यतन करने के लिए स्क्रिप्ट स्थापित निम्न डेटा के साथ समाप्त हो गया (इस उदाहरण में, एक वर्ग, नाम से भरी हुई है नाम अद्यतन किया जाता है जिसके बाद):

<?php 
    $this->startSetup(); 

    //Switch to admin store (workaround to successfully save a category) 
    $originalStoreId = Mage::app()->getStore()->getId(); 
    Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID); 

    //update category 
    $category = Mage::getModel('catalog/category') 
     ->loadByAttribute('name', 'OLD_CATEGORY_NAME'); 
    if ($category) { 
     $category 
      ->setStoreId(Mage_Core_Model_App::ADMIN_STORE_ID) 
      ->setName('NEW_CATEGORY_NAME') 
      ->save(); 
    } 

    //Set store to original value 
    Mage::app()->setCurrentStore($originalStoreId); 

    $this->endSetup(); 
?> 
-1

मैं कई बनाया है इंस्टॉलर स्क्रिप्ट के माध्यम से श्रेणियां।

<?php 
$installer = $this; 
$installer->startSetup(); 

Mage::register('isSecureArea', 1); 

$category = Mage::getModel('catalog/category'); 
$category->setPath('1/2/4') // set parent to be root category 
->setName('CAT NAME') //Category Name 
->setIsActive(1) // Category Status 
->setIncludeInMenu(1) // Show in Menu 
->setIsAnchor(1) // used for Layered navigation 
->setDisplayMode('PAGE') // Product Only 
->setPageLayout('one_column') // Page layout 
->save(); 

$installer->endSetup(); 
संबंधित मुद्दे