blog-post

Manticore Buddy: प्लग करने योग्य डिज़ाइन v2

हे दोस्तों। Manticore Buddy के बारे में रोमांचक समाचार: हमने प्लग करने योग्य डिज़ाइन में माइग्रेशन पूरा कर लिया है! इसका मतलब है कि आप अपने स्वयं के Manticore Search SQL/JSON क्वेरी को एक प्लगइन के रूप में बना सकते हैं, इसे packagist.org पर प्रकाशित कर सकते हैं, और CREATE PLUGIN SQL कमांड के माध्यम से इसे स्थापित कर सकते हैं। चलिए प्लग करने योग्य प्रणाली की संरचना और एक सरल ट्यूटोरियल में डुबकी लगाते हैं जो आपको शुरू करने में मदद करेगा।

संरचना

परिचय

यदि आप Buddy के साथ परिचित नहीं हैं, तो हम ब्लॉग पोस्ट पढ़ने की सिफारिश करते हैं:

जो हमने पहले प्रकाशित की थीं।

शुरुआत में, Buddy को PHP में विकसित किया गया था, सभी एक्सटेंशन और अतिरिक्त कमांड हैंडलर एक ही कोड बेस में थे। Manticore Search 6 के जारी होने के बाद, हमें कस्टम कार्यक्षमता जोड़ने के बारे में प्रश्न मिले और हमें महसूस हुआ कि वर्तमान प्रणाली में लचीलापन की कमी है। इसलिए हमने प्लग करने योग्य आर्किटेक्चर में माइग्रेट करने का निर्णय लिया।

हम मानते हैं कि सॉफ़्टवेयर विकास में सबसे महत्वपूर्ण सिद्धांत पहिए को फिर से ना बनाना और चीजों को सरल रखना है। परिणामस्वरूप, हमने बहुत अधिक समय बिताने का निर्णय नहीं लिया और PHP दुनिया में प्लगइन सिस्टम को प्रबंधित करने के लिए सबसे प्रसिद्ध और लोकप्रिय पैकेज प्रबंधक को चुना – Packagist

प्लगइन प्रकार

प्लगइनों के तीन प्रकार हैं:

  • core - Buddy के साथ डिफ़ॉल्ट रूप से शामिल होता है और यह पैकेज का हिस्सा है जो आपको Manticore स्थापित करने पर मिलता है।
  • local - विकास और डिबगिंग के लिए उपयोग किया जाता है इससे पहले कि इसे प्रकाशित किया जाए।
  • external - CREATE PLUGIN कमांड का उपयोग करके स्थापित किया गया।

यह ट्यूटोरियल पहले local प्लगइन बनाने और फिर इसे external में कैसे बदलें, इसे समझाता है, जिससे किसी भी Manticore उपयोगकर्ता को आपके प्लगइन का उपयोग करके अपनी सेटअप को बढ़ाने की अनुमति मिलती है।

अनुरोध -> प्रतिक्रिया प्रवाह

इसको कार्य करने के लिए, हमने Buddy और सभी प्लगइनों में सामान्य रूप से उपयोग किए जाने वाले घटकों को एक नए पैकेज में निकाल लिया है – Buddy Core । इसे आपके प्लगइन को विकसित करते समय शामिल किया जाना चाहिए, जिससे आपके IDE में चीजें आसान और सहायता संकेत तथा स्वचालित सम्पूर्णता प्राप्त हो सके।

कोड जो Buddy को एक डेमन के रूप में कार्य करने और आंतरिक कार्य करने में सक्षम बनाता है, जिसमें Core और Plugin स्रोत कोड को कनेक्ट करना शामिल है, इसे Buddy Base कहा जाता है। यह एक ReactPHP एप्लिकेशन है जो Buddy Core का भी उपयोग करता है और सब कुछ कार्य करने के लिए और आदेश पर लॉन्च करने के लिए सही प्लगइन खोजने की बुनियादी लॉजिक है।

प्रक्रिया को स्पष्ट रूप से समझने के लिए, यहां एक आरेख है जो अनुरोध → प्रतिक्रिया प्रवाह का चित्रण करता है:

Manticore Buddy Request to Response Flow

ट्यूटोरियल

आपके लिए चीजों को आसान बनाने और अपने स्वयं के प्लगइन को विकसित करने में डुबकी लगाने के लिए, आइए देखें कि हम Buddy के लिए एक सरल प्लगइन कैसे बना सकते हैं जो SHOW HOSTNAME कमांड का समर्थन करता है और वर्तमान होस्ट मशीन का नाम लौटाता है। इससे आपको यह समझने में मदद मिलेगी कि अपने स्वयं के प्लगइन बनाने के लिए आपको किस प्रक्रिया का पालन करना चाहिए, और यह शुरू करने के लिए एक अविश्वसनीय रूप से सरल उदाहरण भी है। यदि हम Manticore Search में SHOW HOSTNAME कैसे कार्य करता है इसकी जांच करते हैं, इससे पहले कि हम इसकी लॉजिक लागू करें, हम इस तरह का परिणाम उम्मीद कर सकते हैं:

mysql> SHOW HOSTNAME;
ERROR 1064 (42000): sphinxql: syntax error, unexpected identifier, expecting VARIABLES near 'HOSTNAME'

तैयारी

पहली चीज़ जो हमें करनी चाहिए, वह यह है कि हम अपने विकास वातावरण को तैयार करें। आपको यह केवल एक बार करना है और बाद में आप Buddy को GIT भंडार से नवीनतम अपडेट प्राप्त करने के लिए अपडेट कर सकते हैं। चलिए टर्मिनल खोलते हैं और Buddy को हमारी मशीन पर manticoresearch-buddy नाम के फ़ोल्डर में क्लोन करते हैं और क्लोन की गई फ़ोल्डर्स में जाते हैं।

git clone --depth 1 https://github.com/manticoresoftware/manticoresearch-buddy.git
cd manticoresearch-buddy

अब आपके पास Buddy का पूरा स्रोत कोड है, लेकिन कोई भी पैकेज स्थापित नहीं है। Buddy अपने निर्भरताओं को प्रबंधित करने के लिए Composer का उपयोग करता है, और हमें ऐप्लिकेशन को चलाने के लिए पहले इन्हें स्थापित करना होगा। हालांकि, इससे पहले, हम एक विशेष Docker कंटेनर चलाएंगे जिसे हमने विशेष रूप से विकास के लिए तैयार किया है। Manticore Executor Kit इमेज में एक चिकनी Manticore Buddy विकास अनुभव के लिए सभी आवश्यक उपकरण शामिल हैं, चाहे आप नए प्लगइन बना रहे हों या Buddy में योगदान कर रहे हों।

docker pull ghcr.io/manticoresoftware/manticoresearch:test-kit-latest
docker create --privileged --entrypoint bash \
  -v $(pwd):/workdir -w /workdir --name manticore-buddy \
  --network host -it ghcr.io/manticoresoftware/manticoresearch:test-kit-latest
docker start manticore-buddy

बधाई हो! आपने अब Manticore Search और Manticore Executor के साथ Buddy और प्लगइनों को विकसित करने के लिए एक Docker कंटेनर शुरू किया है। आपका वर्तमान कार्यशील निर्देशिका कंटेनर के अंदर /workdir से मैप की गई है। आपका अगला कदम Composer निर्भरताओं को स्थापित करना है। याद रखें, यह और सभी आगे के आदेश manticore-buddy कंटेनर के अंदर निष्पादित किए जाने चाहिए।

docker exec -it manticore-buddy bash
composer install

आपका Buddy अब उपयोग, विकास, डिबगिंग, और परीक्षण के लिए तैयार है। अगली बात, आपको दो चीजें पूरी करनी हैं:

  1. पहले, कंटेनर के भीतर /etc/manticoresearch/manticore.conf को संपादित करें और वहां buddy_path के साथ हमारे स्रोत जोड़ें। यह Manticore Search को यह बताने देगा कि हमें स्रोतों से चलने वाले Buddy के कस्टम पथ का उपयोग करना है, स्थापित मॉड्यूलों से नहीं। इसे searchd अनुभाग में जोड़ें:
    buddy_path = manticore-executor /workdir/src/main.php --debug
    
  2. दूसरी बात, searchd (Manticore Search सर्वर) चलाने की कोशिश करें और सुनिश्चित करें कि यह काम करता है।
    # कंटेनर के अंदर डेमन लॉन्च करें और इसेforeground में रखें
    searchd --nodetach
    
    आपको कुछ पंक्तियाँ [BUDDY] से शुरू होती हुई दिखाई देनी चाहिए।

इस बिंदु पर, आपके विकास पर्यावरण को Buddy के लिए तैयार करने और एक नए प्लगइन के कार्यान्वयन की प्रक्रिया शुरू करने के लिए सब कुछ सेट है। आप अभी भी इसके साथ प्रयोग कर सकते हैं और कुछ क्वेरी निष्पादित करने का प्रयास कर सकते हैं ताकि यह सुनिश्चित हो सके कि यह ठीक से कार्य कर रहा है। उदाहरण के लिए, एक और टर्मिनल विंडो खोलें और निम्नलिखित चलाएँ:

$ docker exec -it manticore-buddy mysql -h0 -P9306
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 6.0.5 3bcbd00fa@230320 dev (columnar 2.0.5 8171c1a@230320) (secondary 2.0.5 8171c1a@230320) git branch HEAD (no branch)

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]> show queries;
+------+--------------+----------+-----------------+
| id   | query        | protocol | host            |
+------+--------------+----------+-----------------+
|   10 | select       | http     | 127.0.0.1:19148 |
|    9 | show queries | mysql    | 127.0.0.1:54484 |
+------+--------------+----------+-----------------+
2 rows in set (0.008 sec)

MySQL [(none)]>

आपने अभी SHOW QUERIES कमांड Manticore Search को भेजी है, जो फिर Buddy को रूट की गई थी और सफलतापूर्वक निष्पादित की गई थी। आप देख सकते हैं कि Buddy ने क्या प्राप्त किया और पहले टर्मिनल टैब में searchd लॉग में इसका उत्तर देखा। तो, हम पुष्टि कर सकते हैं कि Buddy सही तरीके से काम कर रहा है और सब कुछ सही ढंग से सेट किया गया है।

जब आप searchd प्रक्रिया को बंद करना चाहते हैं, तो बस पहले टर्मिनल विंडो/टैब में Ctrl + C दबाएँ।

प्लगइन टेम्पलेट

हमने विशेष GitHub टेम्पलेट रिपॉजिटरी बनाई है जिसे हम किसी भी Manticore Buddy प्लगइन बनाने के लिए अत्यधिक अनुशंसा करते हैं। सभी प्लगइन को buddy-plugin-[आपका-name] से पूर्ववत किया जाना चाहिए, जहाँ [आपका-name] आपके प्लगइन का नाम है। उदाहरण के लिए, चूंकि हम एकhostname चयन प्लगइन विकसित कर रहे हैं, हम इसका नाम buddy-plugin-show-hostname रखेंगे। तो:

  1. https://github.com/manticoresoftware/buddy-plugin-template खोलें।
  2. Use this template पर क्लिक करें और फिर Create a new repository पर क्लिक करें।
  3. अपने रिपॉजिटरी का नाम भरें और इसे बनाएं। सुनिश्चित करें कि आपके रिपो का नाम buddy-plugin- से शुरू होता है क्योंकि यह अनिवार्य है।
  4. अपने नए रिपो को Manticore Buddy रिपो के plugins डायरेक्टरी में git clone करें जिसे आपने पहले तैनात किया था। ध्यान दें कि यह कंटेनर के बाहर करना बेहतर है, विशेष रूप से यदि आप एक निजी रिपॉजिटरी से क्लोन कर रहे हैं।

https://github.com/manticoresoftware/buddy-plugin-show-hostname में, आप पूरा कार्य कार्यान्वित करते हुए पाएंगे। यदि आप विवरण में नहीं जाना चाहते हैं, तो आप इसके बजाय उस प्लगिन को git clone कर सकते हैं। हालाँकि, यदि आप प्लगइन बनाने में निपुण होना चाहते हैं, तो चलिए आगे बढ़ते हैं।

असली कोड जोड़ें

अब हमें अगले चरणों का पालन करने की आवश्यकता है और हमारे टेम्पलेट को हमारे नए प्लगइन से संबंधित डेटा के साथ अपडेट करना है।

  1. सबसे पहले, अपने क्लोन किए गए प्लगइन के डायरेक्टरी में composer.json खोलें और प्लगइन का नाम, विवरण और नेमस्पेस अपडेट करें। तो आखिरकार, आपके परिवर्तन इस तरह दिखें:
diff --git a/composer.json b/composer.json
index 23c252b..f36cb6e 100644
--- a/composer.json
+++ b/composer.json
@@ -1,11 +1,11 @@
 {
- "name": "manticoresoftware/buddy-plugin-template",
- "description": "The Buddy template handler plugin",
+ "name": "manticoresoftware/buddy-plugin-show-hostname",
+ "description": "The Buddy SHOW hostname handler plugin",
  "type": "library",
  "license": "GPL-2.0-or-later",
  "autoload": {
    "psr-4": {
-     "Manticoresearch\\Buddy\\Plugin\\Template\\": "src/"
+     "Manticoresearch\\Buddy\\Plugin\\ShowHostname\\": "src/"
    }
  },
  "authors": [
  1. हमें अपने प्लगइन में दो वर्गों के नेमस्पेस को भी अपडेट करने की आवश्यकता है - Payload और Handler। डिफ को इस तरह दिखना चाहिए:
diff --git a/src/Handler.php b/src/Handler.php
index 3756dc3..07fcfd0 100644
--- a/src/Handler.php
+++ b/src/Handler.php
@@ -8,7 +8,7 @@
   version. You should have received a copy of the GPL license along with this
   program; if you did not, you can find it at http://www.gnu.org/
 */
-namespace Manticoresearch\Buddy\Plugin\Template;
+namespace Manticoresearch\Buddy\Plugin\ShowHostname;

 use Manticoresearch\Buddy\Core\Plugin\BaseHandler;
 use Manticoresearch\Buddy\Core\Task\Task;
diff --git a/src/Payload.php b/src/Payload.php
index b170340..a35f201 100644
--- a/src/Payload.php
+++ b/src/Payload.php
@@ -8,7 +8,7 @@
   version. You should have received a copy of the GPL license along with this
   program; if you did not, you can find it at http://www.gnu.org/
 */
-namespace Manticoresearch\Buddy\Plugin\Template;
+namespace Manticoresearch\Buddy\Plugin\ShowHostname;

 use Manticoresearch\Buddy\Core\Network\Request;
 use Manticoresearch\Buddy\Core\Plugin\BasePayload;
  1. अंतिम चरण के रूप में, नई निर्भरता को composer install चलाकर इंस्टॉल करना न भूलें ( /workdir में)।

Manticore Search से आपके प्लगइन और वापस आने वाली अनुरोध प्रवाह

अब हम अपने लॉजिक को लागू करने के लिए तैयार हैं। लेकिन पहले, चलिए जानते हैं कि इसे आंतरिक रूप से कैसे संभाला जाता है।

Manticore Buddy Request to Plugin Flow

मान लीजिए कि हम MySQL क्लाइंट का उपयोग करके लॉन्च किए गए searchd प्रक्रिया को SHOW HOSTNAME क्वेरी भेज रहे हैं। Manticore Search इसे संभाल नहीं सकता और इसका उत्तर पाने के लिए इसे Buddy को भेजता है। Buddy सटीक उत्तर दे सकता है, जिसे केवल MySQL क्लाइंट को वापस प्रॉक्सी किया जाएगा।

एक बार जब Buddy Manticore Search से क्वेरी प्राप्त करता है, तो यह इसे पार्स करता है और सभी प्लगइनों पर सत्यापन करता है: पहले कोर प्लगइन्स, और फिर बाहरी प्लगइन्स। इस सत्यापन को चलाने के लिए, यह Payload::hasMatch($request) विधि को निष्पादित करता है, इसे अनुरोध पास करते हुए, जिसमें क्वेरी और कुछ मेटाडेटा, जैसे अनुरोधित अंत बिंदु, प्रकार (JSON या SQL), और इसी तरह शामिल हैं।

Payload आदेश को संभालने के लिए सभी आवश्यक डेटा वाली संरचना का प्रतिनिधित्व करता है। यदि एक प्लगइन का Payload hasMatch विधि में true लौटाता है, तो इसका मतलब है कि हम इस प्लगइन का उपयोग अनुरोध को संभालने के लिए करेंगे। इसे Request से बनाया गया है, और इस चरण में, हमें क्वेरी को पार्स करना, मूल्यवान जानकारी निकालनी है, और इसे हमारे पेलोड डेटा में सेट करना है, जिसे Handler को भेजा जाएगा।

Handler वह क्लास है जो वास्तव में लागू किए गए आदेश को निष्पादित करता है। यह मुख्य सर्वर लूप को बाधित किए बिना पैरेलल एक्सटेंशन का उपयोग करके एक थ्रेडेड वातावरण में ऐसा करता है। एक सरल विधि run है जो एक क्लोजर बनाती है, जिसे एक कार्य करना और प्रतिक्रिया को Manticore Search के पास वापस लौटाना चाहिए, जिसे फिर उपयोगकर्ता के लिए प्रॉक्सी किया जाता है।

हमारे मामले में, हमें बस SHOW HOSTNAME क्वेरी सिंटैक्स का समर्थन करने के लिए एक जांच जोड़ने की आवश्यकता है और फिर gethostname PHP फ़ंक्शन को कॉल करने और इसे एक प्रतिक्रिया के रूप में लौटाने के लिए Handler लॉजिक को लिखना है। बस इतना ही! आइए Payload के साथ शुरू करते हैं।

Payload को लागू करना

जब आप src/Payload.php खोलते हैं, तो आप देखेंगे कि इसमें केवल दो विधियाँ हैं: fromRequest और hasMatch। हमने उन लाइनों को TODO टिप्पणियों के साथ चिह्नित किया है, इसलिए हमें जो करना है, उसे ढूंढना आसान होना चाहिए। हमारे मामले में, क्वेरी बहुत सरल है और बिल्कुल भी लचीली नहीं है, इसलिए हमें fromRequest विधि में कुछ भी बदलने की आवश्यकता नहीं है। हम बस TODO टिप्पणियों को हटा सकते हैं। हमें जो करना है वो यह है कि स्थैतिक फ़ंक्शन hasMatch() को अपडेट करना है। वहां हमें यह जांच लागू करनी है कि क्वेरी सख्त रूप से SHOW HOSTNAME स्ट्रिंग से मिलती है, जिसमें स्थिति-संवेदी दृष्टिकोण न हो। एक बार जब यह मेल खाता है, तो हमें true लौटाना चाहिए। अन्यथा, हमें false लौटाना चाहिए। ऐसा ही आधार प्रणाली समझती है कि इसे उस प्लगइन का उपयोग करना चाहिए यदि हमें एक क्वेरी मिलती है जो एक होस्टनेम दिखाती है।

Payload में किए गए अंतिम परिवर्तन इस प्रकार दिखने चाहिए:

diff --git a/src/Payload.php b/src/Payload.php
index a35f201..bd0795e 100644
--- a/src/Payload.php
+++ b/src/Payload.php
@@ -26,7 +26,6 @@ final class Payload extends BasePayload {
   */
  public static function fromRequest(Request $request): static {
    $self = new static();
-   // TODO: add logic of parsing request into payload here
    // We just need to do something, but actually its' just for PHPstan
    $self->path = $request->path;
    return $self;
@@ -37,7 +36,6 @@ final class Payload extends BasePayload {
   * @return bool
   */
  public static function hasMatch(Request $request): bool {
-   // TODO: validate $request->payload and return true, if your plugin should handle it
-   return $request->payload === 'template';
+   return stripos($request->payload, 'show hostname') !== false;
  }
 }

हम Payload परिवर्तनों के साथ समाप्त हो गए हैं और वास्तव में लॉजिक लागू करने के लिए Handler की ओर बढ़ सकते हैं।

Handler को लागू करना

अब, आइए src/Handler.php खोलते हैं और TODO चिह्नों का संक्षिप्त विवरण देखते हैं कि क्या हो रहा है। हमें run विधि पर नेविगेट करना है और इसे अपडेट करना है।

हम एक क्लोजर देख सकते हैं जो एक TaskResult लौटाता है, जो एक विशेष परिणाम प्रकार है जो एक मानक JSON प्रतिक्रिया को लपेटता है।

हम एक gethostname() कॉल शामिल करेंगे और प्रतिक्रिया को TaskResult के भीतर लपेटकर तैयार करेंगे जो क्लाइंट को लौटाया जाएगा। अंतिम परिवर्तन इस प्रकार दिखाई देगा:

diff --git a/src/Handler.php b/src/Handler.php
index 07fcfd0..944899b 100644
--- a/src/Handler.php
+++ b/src/Handler.php
@@ -11,6 +11,7 @@
 namespace Manticoresearch\Buddy\Plugin\ShowHostname;

 use Manticoresearch\Buddy\Core\Plugin\BaseHandler;
+use Manticoresearch\Buddy\Core\Task\Column;
 use Manticoresearch\Buddy\Core\Task\Task;
 use Manticoresearch\Buddy\Core\Task\TaskResult;
 use RuntimeException;
@@ -33,9 +34,11 @@ final class Handler extends BaseHandler {
   * @throws RuntimeException
   */
  public function run(): Task {
-   // TODO: your logic goes into closure and should return TaskResult as response
    $taskFn = static function (): TaskResult {
-     return TaskResult::none();
+     $hostname = gethostname();
+     return TaskResult::withRow([
+       'hostname' => $hostname,
+     ])->column('hostname', Column::String);
    };

    return Task::create(

डिबगिंग और विकास

अब जब आपने कार्यान्वयन पूरा कर लिया है, तो इसे परीक्षण और डिबग करने का समय है (यदि आवश्यक हो) आपके प्लगइन। एक विशेष प्रकार का प्लगइन है जिसे local कहा जाता है जो विशेषतः इस उद्देश्य के लिए डिज़ाइन किया गया है। चूंकि आपका प्लगइन पहले से ही plugins निर्देशिका में है, यह स्वचालित रूप से एक local प्लगइन बन जाता है। इसका उपयोग करने के लिए, बस:

  1. मुख्य Buddy निर्देशिका में, आदेश composer require [your-plugin-name]:dev-main चलाकर प्लगइन को शामिल करें। your-plugin-name वह नाम है जो आप पहले अपने प्लगइन के composer.json से संपादित किया गया था।
  2. यह सुनिश्चित करने के लिए searchd को पुनरारंभ करें कि कोड अपडेट हो गया है।

यह विधि आपको अपने प्लगइन को लाइव विकसित करने, डिबग करने, संपादित करने और परीक्षण करने की अनुमति देती है बिना इसे Git रिपॉजिटरी पर धकेलने और packagist.org पर प्रकाशित किए।

प्रकाशित करना और स्थापित करना

जब आप डिबगिंग के साथ समाप्त हो जाते हैं और अपने प्लगइन को प्रकाशित करने के लिए तैयार होते हैं, तो बस अपने परिवर्तनों को Git रिपॉजिटरी में कमिट करें और अपने पैकेज को packagist.org पर प्रकाशित करें।

उसके बाद, यह सुनिश्चित करने के लिए कि यह जैसा अपेक्षित है, आदेश CREATE PLUGIN [your-plugin-name] TYPE 'buddy' VERSION 'dev-main' चलाएं, जो Composer का उपयोग कर प्लगइन को डाउनलोड करने का प्रयास करेगा और इसे plugin_dir में स्थापित करेगा।

इस प्रकार:

$ docker exec -it manticore-buddy mysql -h0 -P9306
MySQL [(none)]> CREATE PLUGIN manticoresoftware/buddy-plugin-show-hostname type 'buddy' VERSION 'dev-main';

Query OK, 0 rows affected (1 min 12.213 sec)

MySQL [(none)]> show hostname;
+----------+
| hostname |
+----------+
| dev      |
+----------+
1 row in set (0.011 sec)

MySQL [(none)]>

बधाई हो! आपका प्लगइन ठीक है और यह आपको SHOW hostname क्वेरी का उपयोग करके होस्टनेम प्राप्त करने की अनुमति देता है।

निष्कर्ष

हम आशा करते हैं कि आपनेこの記事 का आनंद लिया और Manticore संस्करण 6.0.4 से उपलब्ध नए Buddy प्लगबल आर्किटेक्चर की गहरी समझ प्राप्त की। आप तुरंत अपने प्लगइन का विकास शुरू कर सकते हैं जो निर्देश हमने प्रदान किए हैं। जबकि यह प्लगबल सिस्टम का एक बुनियादी परिचय है, हम एक जटिल प्लगइन के विकास पर एक अधिक उन्नत लेख बनाने और प्रकाशित करने की योजना बना रहे हैं। हमारे Slack या Telegram चैट में हमसे प्रश्न पूछने में संकोच न करें, और जटिल प्लगइन ट्यूटोरियल के लिए विषय सुझाव देने में भी संकोच न करें।

याद रखें, Buddy के बिल्ट-इन प्लगइन कोड का पता लगाना एक अच्छा विचार है ताकि आप यह समझ सकें कि यह अधिक जटिल परिदृश्यों में कैसे कार्य करता है।

सादर,
Manticore टीम।

मैंटीकोर सर्च इंस्टॉल करें

मैंटीकोर सर्च इंस्टॉल करें