কোর ক্লাস ওভাররাইড করবেন কীভাবে?


20

কখনও কখনও আরও কার্যকারিতা পেতে বা কিছু মূল ফাংশন অন্যভাবে কাজ করার জন্য কোর ক্লাসগুলি ওভাররাইড করা প্রয়োজন। কোর ক্লাস ওভাররাইড করার কোনও উপায় আছে কি? যদি এটি সম্ভব হয় তবে এগুলি ওভাররাইড করে আমি কী সমস্যার মুখোমুখি হতে পারি?


1
আপনি যদি নিজের প্রশ্নটিকে কিছুটা আরও সুনির্দিষ্ট করতে বা কোনও পরিষ্কার সমস্যা বর্ণনা করতে চান তবে এটি দুর্দান্ত হবে।
ভ্যালেনটিন দেশপা

জুমলা 3 ব্যবহারকারীদের জন্য - এগুলি পরীক্ষা করে দেখুন। এটা তোমাকে সাহায্য করবে. joomla.stackexchange.com/questions/5449/… প্লাগইন - github.com/ghazal/plg_mvcoverride ধন্যবাদ joomla.stackexchange.com/users/270/ghazal

উত্তর:


16

হ্যা এটা সম্ভব.

ক্লাসগুলিকে ওভাররাইড করতে আপনি একটি সিস্টেম প্লাগইন ব্যবহার করতে পারেন, দয়া করে এই লিঙ্কটি এবং এটি এবং এটি পড়ুন

দুটি সমস্যার মুখোমুখি হবেন:

  1. আপনাকে পুরো ক্লাসটি ওভাররাইড করতে হবে (কেবল এর অংশ নয়)

  2. যদি কোরটি আপডেট হয় এবং ক্লাসটিও আপডেট / পরিবর্তিত হয় তবে আপনাকে আপনার ওভাররাইড আপডেট করতে হবে (প্রয়োজনে)।


4
আপনি যদি সরবরাহিত লিঙ্কগুলি থেকে প্রাসঙ্গিক পদক্ষেপগুলি আটকে দিতে পারেন বা লিঙ্কগুলি সরানো বা পরিবর্তিত হতে পারে তবে কমপক্ষে একটি বিবরণ দিতে পারলে এটি কার্যকর হবে।
কোডিংহাঁস

10

আমি কিছুক্ষণ আগে একটি প্লাগইন তৈরি করেছি যা আপনাকে মূল ক্লাসগুলিকে ওভাররাইড করতে দেয় তবে এটি এখনও জ্যাকজো তার উত্তরে যে সমস্যাগুলি দেখিয়েছিল সেগুলির শিকার হয়ে যায়। তবে এটি আপনাকে পরিষ্কারভাবে ওভাররাইডগুলি করার অনুমতি দেয়।

https://gist.github.com/dongilbert/3237387


7
কেবল এটিই বলতে চাই যে এই সমাধানটি সুন্দরভাবে কাজ করে এবং ডন ওপেন সোর্সের সত্যিকারের আত্মীয় আত্মা - তার এবং তার কাজের প্রতি টুপি !!!
জিডিপি

আপনার সাধারণ স্ক্রিপ্টটিতে যথেষ্ট সমস্যা রয়েছে এটি হ'ল এটি উপাদানগুলি প্রিলোড করে না। সুতরাং, যদি আপনি উপাদানগুলি ওভাররাইড করে থাকেন তবে এটি সত্যিই তাদের বেশিরভাগের জন্য কাজ করে না (উদাহরণস্বরূপ com_Contant উপাদান)। এটি ভালভাবে কাজ করে, তবে এটি অবশ্যই প্রিলোড উপাদানটি যাতে এটি তাদের ওভাররাইড করতে পারে (আপনি এমন কোনও কিছু ওভাররাইড করতে পারবেন না যা এখনও ঘোষিত হয়নি)। ওহ, এবং আপনাকে অবশ্যই কনট্রাক্টরে পুরো জিনিসটি না করার পরে আফটাররউটে অবশ্যই ব্যবহার করতে হবে। আপনি যদি এই মন্তব্যটির দ্বারা আমার অর্থ কী তা জানতে চান তবে ওভাররাইড করার চেষ্টা করুন components/com_content/models/articles.php
itoctopus

5

জুমলা 3 ব্যবহারকারীর জন্য - এগুলি পরীক্ষা করে দেখুন। এটা তোমাকে সাহায্য করবে.

জুমলা 3 তে এমভিসি ক্লাস ওভাররাইড করুন

প্লাগিন - https://github.com/ghazal/plg_mvcoverride

http://docs.joomla.org/How_to_override_the_component_mvc_from_the_Joomla!_core

ধন্যবাদ /joomla//users/270/ghazal


4

আমি এটির জন্য দীর্ঘ সময় ছিলাম এবং ডনকে প্রতিশ্রুতি দিয়েছিলাম যে আমার কাজ শেষ হয়ে গেলে এটি সম্পর্কে আরও বিশদ জানাব।

আমি উপাদানগুলির জন্য জুমলা এমভিসিটিকে ওভাররাইড করতে এবং জুমলাকে আমার প্লাগইন এইচটিএমএল ফোল্ডারেও কেবল টেম্পলেট এইচটিএমএল ফোল্ডারের মধ্যেই ওভাররাইডগুলি সন্ধান করতে বলি।

আমি কখনই পছন্দ করতে পারি নি যখন বিকাশকারীরা আসলে জুমলা ডিফল্ট ক্লাস নেন এবং এটির সাথে জগাখিচুড়ি হয়, তাই কিছু ব্রেক করার পরিবর্তে আমি যদি পারি তবে আমি ক্লাসটি প্রসারিত করি।

আমার প্রক্রিয়া অনুসরণ করে।

  1. আমার যে ক্লাসটি ওভাররাইড করা দরকার তা পান
  2. এটি পড়ুন, শ্রেণীর নাম প্রতিস্থাপন করুন, আমার টেম্প ক্লাস ফোল্ডারে নতুন ফাইল তৈরি করুন
  3. ক্লাসের আমার সংস্করণটি লোড করুন
  4. জুমলা ক্লাস লোড করুন
  5. জুমলা টেম্পলেট এবং শেষ জুমলা উপাদানগুলির চেয়ে আমার বর্ধিত পদ্ধতিটি নিবন্ধ করুন যা আমার প্লাগইনে ওভাররাইড সন্ধান করতে ফাংশন লোডপ্লেপলেট প্রসারিত করে

চিত্রটি এখানে নয় বরং http://prnscr.com/3d9syq

নীচে স্নিপেটের প্রথম অংশগুলি ব্যবহারকারী কোথায় আছে তা যাচাই করছে, যদি তিনি জুমলা আপডেট করতে চলেছেন তবে আমি তৈরি করা টেম্প ক্লাসের ফাইলগুলি মুছে ফেলছি যা নিশ্চিত হয়ে যায় যে আপডেটটি সম্পূর্ণ হওয়ার পরে আমরা জ্যাকজয়ের সংখ্যাটি যত্ন নেওয়ার চেয়ে বেশি যত্ন নেওয়ার চেষ্টা করি ones 2।

if (($this->Input('option') == 'com_joomlaupdate' && $this->Input('task') == 'update.install') || ($this->Input('option') == 'com_joomlaupdate' && $this->Input('layout') == 'complete')) {

    JFolder::delete(JPATH_SITE . '/plugins/system/yjsg/includes/yjsgcore/classes/extend/classes/');
    JFolder::create(JPATH_SITE . '/plugins/system/yjsg/includes/yjsgcore/classes/extend/classes/');
    $indexContent = '';
    JFile::write(JPATH_SITE . '/plugins/system/yjsg/includes/yjsgcore/classes/extend/classes/index.html', $indexContent);
}

$YjsgJViewDefaultRead         = JPATH_LIBRARIES . '/legacy/view/legacy.php';
$YjsgJViewDefaultFile         = YJSGEXTEND . "classes" . YJDS . "Yjsg" . $isView . "Default" . $IsJversion . ".php";



    //extend JView library class

    if (!JFile::exists($YjsgJViewDefaultFile)) {
        $YjsgJViewDefault = JFile::read($YjsgJViewDefaultRead);
        $YjsgJViewDefault = str_replace('class ' . $isView, 'class Yjsg' . $isView . 'Default', $YjsgJViewDefault);
        JFile::write($YjsgJViewDefaultFile, $YjsgJViewDefault);
    }

    require_once($YjsgJViewDefaultFile);
    jimport('joomla.application.component.view');
    JLoader::register($isView, YJSGEXTEND . $IsJversion . '/component/view.php', true);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.