অ-অবজেক্টে সেটস্যাভপ্যারামিটারআইনসেশন ()


14

আমি পাচ্ছি setSaveParametersInSession() on a non-object

এটি কোনও অ্যাডমিন মডিউলে চলছে path

Training/Distributor/Block/Adminhtml/ এই ফোল্ডারে আমার আছে

Distributor/Grid.php এবং Distributor.php

class Training_Distributor_Block_Adminhtml_Distributor
extends Mage_Adminhtml_Block_Widget_Grid_Container
{

/**
* my understanding:
* $this->_blockGroup . '/' . $this->_controller . '_grid'
* i.e. training_distributor/adminhtml_distributor_grid
*/
public function _construct()
{
    $this->_blockGroup = 'training_distributor';
    $this->_controller = 'adminhtml_distributor';
    $this->_headerText = $this->__('List Distributors');
    $this->_addButtonLabel = $this->__('Add Distributor');

    parent::_construct();
}
}

কেন আমি এই ত্রুটি পেতে পারি?

আমি কোনও টাইপ দেখতে পাচ্ছি না এবং আমি নিশ্চিত - এটি -> _ ব্লকগ্রুপ এবং $ এটি -> _ নিয়ামকটি ঠিক।

আমার আর কি কি জিনিস সন্ধান করা দরকার? নাকি আমি কিছু মিস করেছি?

গুগল এবং স্ট্যাকের অনুসন্ধানের পরে আমি মানুষকে সাধারণত _ ব্লকগ্রুপ বা _ নিয়ন্ত্রণকারীকে দেখতে পেয়েছি, তবে এটি আমার ক্ষেত্রে মনে হয় না doesn't

===

সম্পাদনা

===

<config>
<modules>
    <Training_Distributor>
        <version>0.0.2</version>
    </Training_Distributor>
</modules>
<global>
    <resources>
        <training_distributor_setup>
            <setup>
                <module>Training_Distributor</module>
            </setup>
        </training_distributor_setup>
    </resources>

    <models>
        <training_distributor>
            <class>Training_Distributor_Model</class>
            <resourceModel>training_distributor_resource</resourceModel>
        </training_distributor>

        <training_distributor_resource>
            <class>Training_Distributor_Model_Resource</class>
            <entities>
                <distributor>
                    <table>training_distributor_entity</table>
                </distributor>
            </entities>
        </training_distributor_resource>
    </models>
    <blocks>
        <training_distributor>
            <class>Training_Distributor_Block</class>
        </training_distributor>
    </blocks>
    <helpers>
        <training_distributor>
            <class>Training_Distributor_Helper</class>
        </training_distributor>                
    </helpers>
</global>

<admin>
    <routers>
        <adminhtml>
            <args>
                <modules>
                    <training_distributor before="Mage_Adminhtml">Training_Distributor_Adminhtml</training_distributor>
                </modules>
            </args>
        </adminhtml>
    </routers>
</admin>

<adminhtml>
    <layout>
        <updates>
            <training_distributor>
                <file>training/distributor.xml</file>
            </training_distributor>
        </updates>
    </layout>
</adminhtml>

</config>

আপনার config.xml ফাইল যোগ করুন ।
মারিয়াস

দয়া করে সম্পাদনাটি দেখুন
tony09uk

1
কনফিগারেশন প্রথম নজরে ঠিক আছে। __constructপরিবর্তে পদ্ধতি ব্যবহার করার চেষ্টা করুন _construct
মারিয়াস

এটি কাজ করেনি
tony09uk

উত্তর:


27

আপনার প্রদত্ত তথ্যটি বলা শক্ত, তবে আমি কীভাবে এটি ডিবাগ করব here

আপনি কোন ফাইলটিতে এই সমস্যায় পড়ছেন তা উল্লেখ করেননি, তবে সম্ভবত এটি আপনার বেস বেস উইজেট গ্রিড ধারকের এই অংশ

#File: app/code/core/Mage/Adminhtml/Block/Widget/Grid/Container.php
protected function _prepareLayout()
{
    $this->setChild( 'grid',
        $this->getLayout()->createBlock( $this->_blockGroup.'/' . $this->_controller . '_grid',
        $this->_controller . '.grid')->setSaveParametersInSession(true) );
    return parent::_prepareLayout();
}

যার অর্থ ম্যাজেন্টো ব্লক ক্লাসটি ইনস্ট্যান্ট করার চেষ্টা করছে

createBlock($this->_blockGroup.'/' . $this->_controller . '_grid')

বা আপনার ক্ষেত্রে

createBlock('training_distributor/adminhtml_distributor_grid')

কোনও কারণে, আপনার সিস্টেমে ম্যাজেন্টো এই শ্রেণীর ওরফে থেকে কোনও বস্তু ইনস্ট্যান্ট করতে পারে না, যার ফলশ্রুতি অ-অবজেক্ট ত্রুটিতে পদ্ধতিতে আসে।

সুতরাং, এক ধাপে কিছু ডিবাগিং কোড যুক্ত হচ্ছে _prepareLayout

#File: app/code/core/Mage/Adminhtml/Block/Widget/Grid/Container.php
protected function _prepareLayout()
{
    var_dump($this->_blockGroup.'/' . $this->_controller . '_grid');
    ...
}

_blockGroupএবং _controllerসঠিকভাবে সেট করা আছে তা নিশ্চিত করতে ।

তারা ধরে নিচ্ছেন, এখন আপনি কেবলমাত্র একটি সাধারণ শ্রেণির অনুসন্ধান ডিবাগ করছেন। নিম্নলিখিত শ্রেণীর কোডটি চালনার চেষ্টা করুন পিএইচপি শ্রেণীর ম্যাজেন্টো মনে করে যে এটি আপনার শ্রেণীর উলের জন্য ব্যবহার করা উচিত

$class = Mage::getConfig()->getBlockClassName('training_distributor/adminhtml_distributor_grid')
var_dump($class);

আপনার কনফিগারেশনে দৃষ্টিনন্দন, এটি এমন কিছু হওয়া উচিত

Training_Distributor_Block_Adminhtml_Distributor_Grid

যদি $classখালি বা মিথ্যা হয় তবে এর অর্থ আপনার config.xmlফাইলটিতে একটি ত্রুটি রয়েছে । আপনি getGroupedClassNameপদ্ধতিটিতে ঝাঁপিয়ে এটি ডিবাগ করতে পারেন ।

public function getGroupedClassName($groupType, $classId, $groupRootNode=null)
{
    ...
}

এটি সেই পদ্ধতি যেখানে ম্যাগান্তো একীভূত কনফিগারেশনের উল্লেখ করে এবং একটি শ্রেণীর নাম টেনে আনে।

অবশেষে, যদি $class কোনও শ্রেণীর নাম থাকে তবে এর অর্থ ম্যাগেন্তোর অটোলোডার আপনার ক্লাসটি খুঁজে পাবে না। এই ক্লাসটি সরাসরি ইনস্ট্যান্ট করার চেষ্টা করুন (আবার, একটি ডিবাগিং অনুশীলন হিসাবে)

$o = new Training_Distributor_Block_Adminhtml_Distributor_Grid;
var_dump($o);

আপনি সম্ভবত কোনও ধরণের ক্লাসে ত্রুটি খুঁজে পাওয়া যায়নি, কারণ এটি

  1. আপনার শ্রেণি সঠিক স্থানে নেই (app/code/[codepool]/Training/Distributor/Block/Adminhtml/Distributor/Grid.php

  2. সংজ্ঞায়িত শ্রেণীর Grid.phpএটিতে একটি টাইপ রয়েছে


1

$this->_blockGroupএকটি খুব বিভ্রান্তিকর নাম কিন্তু এটি ফোল্ডার নাম এবং মডিউল হওয়া উচিত। আপনার ক্ষেত্রে আমি মনে করি এটি হওয়া উচিত$this->_blockGroup = 'distributor';

Mage_Currencysymbol_Block_Adminhtml_System_Currencysymbolউদাহরণ হিসাবে আপনি যদি লক্ষ্য করেন তবে ব্লকগ্রুপটি ফোল্ডারের নাম এবং কনফিগ.এক্সএমএল-র মডিউল নাম নয়

// Mage_Currencysymbol_Block_Adminhtml_System_Currencysymbol
$this->_blockGroup = 'currencysymbol_system';

আপনার পরামর্শের জন্য ধন্যবাদ, আমি এটি চেষ্টা করেছি তবে ব্যর্থ হয়েছিল।
tony09uk

তুমি কি চেষ্টা করেছ distributor_distributor?
ডেভিড ম্যানার্স

উদাহরণস্বরূপ আপনি পরামর্শ দিয়েছিলেন আমি চেষ্টা করেছি '
ট্রেনিং_ড্রিস্ট্রিবিউটর

@ ডেভিড ম্যানার্স +1 আপনার জন্য এটি আমার জন্য কাজ করে ... ধন্যবাদ ...
কিয়ুর শাহ

0

আপনার ফাইল ফোল্ডারের কাঠামোটি আরও একবার পরীক্ষা করে দেখুন যে সমস্ত ফাইল সঠিক পথে রয়েছে।

আমার ক্ষেত্রে এই সমস্যাটির জন্য ফাইলটি ভুল জায়গায় রাখা হয়েছিল। আমি স্থাপন Grid.phpমধ্যে controller/Adminhtmlবরং যে ফোল্ডারেরBlock/Adminhtml/Grid.php


নামকরণ কনভেনশনগুলি খুব গুরুত্বপূর্ণ। সুতরাং আপনার নাম স্থান এবং মডিউলগুলির নামকরণের সময় সেগুলি সঠিক এবং ম্যাজেন্টো স্ট্যান্ডার্ড অনুযায়ী নিশ্চিত করুন ...
দেবজশা

0

ডিস্ট্রিবিউটর.এক্সএমএল ফাইলের জন্য আপনার পাথ পরীক্ষা করুন। এটি অ্যাপ / ডিজাইন / প্রশাসনিক / ডিফল্ট / ডিফল্ট / বিন্যাস / পরিবেশক.এক্সএমএল স্থাপন করা উচিত।

আপনার পোস্ট করা কনফিগারেশন সম্পর্কিত কোডগুলিতে এটি প্রদর্শন করে

<adminhtml>
    <layout>
        <updates>
            <training_distributor>
                <file>training/distributor.xml</file>
            </training_distributor>
        </updates>
    </layout>
</adminhtml>

বরং এটি এর মতো হওয়া উচিত

<adminhtml>
    <layout>
        <updates>
            <training_distributor>
                <file>distributor.xml</file>
            </training_distributor>
        </updates>
    </layout>
</adminhtml>

এবং ফাইলটি অ্যাপ / ডিজাইন / অ্যাডমিনটিচটিএমএল / ডিফল্ট / ডিফল্ট / লেআউট / পরিবেশক.এক্সএমএল স্থাপন করা উচিত

এটি যদি আপনার বর্তমান দৃশ্যের না হয় তবে এটি করার চেষ্টা করুন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.