Webasystの管理パネル用のネイティブモジュール

多くの場合、顧客は未知のものを要求するので、エンジンを尾とたてがみで遅らせる必要があります。 Webasystは、コードロジックの観点からは考えられず、神秘的であり、インターネット上には適切なマニュアルがほとんどありません。 したがって、私はここで、試行錯誤の苦い経験から学んだことを書きます。 webasystにはいくつかのタイプのモジュールがあり、それぞれについて書く予定ですが、直接プログラミングするのではなく、エンジンにモジュールを埋め込む方法についてのみ説明します。
この記事を読むすべての人がphpを所有していると想定されています。


まず、管理パネルの各要素には独自の要素があります。
たとえば、製品のブックマークは9でした

画像

この番号は、 SC_divisionsテーブルのxIDに対応しています。

adminモジュールの作成は、SC_divisionsテーブルに新しいレコードを埋め込むという事実から始まります。

INSERT INTO `SC_divisions` SET xName='pgn_mymodule', xParentID=9, xEnabled=1, xPriority=100;

xParentID = 9であることに注意してください。 つまり、このモジュールの親は製品になります。 つまり このモジュールは[製品]タブのタブになります。 xPriorityパラメーターは、タブ間の位置を担当します。
xIDが自動インクリメントを割り当てたものを確認し、それを覚えています。 この例では209であるとします。

次に、 SC_division_interfaceテーブルに移動します ここでは、一方ではすべてが明確になっていますが、もう一方ではそうではありません。 そして、ここに「そうではない」が最も重要です。

私たちにとって重要なフィールド:
xDivisionID-明らかに、これはモジュールの識別子です。 209であることに同意しました。
xInterface-モジュールの名前はこのフィールドに格納され、奇妙なことにモジュールへのパスが格納されます。

モジュール名の前にある数字の意味を理解するために、 SC_module_configsテーブルを見てみましょう。
ConfigKeyフィールドを見ると、 / published / SC / html / scripts / modulesフォルダー構造に従っていることがわかります
うん。 そして、 adminscreensにモジュールを入力したいと思います。 ModuleConfigIDが adminscreensに対して何であるかを調べます。 これは48です。
今、私たちにとって謎はありません、そして安全に書くことができます:

INSERT INTO SC_division_interface SET xDivisionID=209, xInterface=48_mymodule;

素晴らしい。 仕事の半分が完了しました。
/ published / SC / html / scripts / modules / adminscreens / _methodsに移動し 、そこにファイルを作成します:

mymodule.xml
 <?xml version="1.0" encoding="UTF-8"?> <interfaces> <interface> <name>My Module</name> <key>mymodule</key> </interface> </interfaces> 


mymodule.php
 <?php /** * Created by JetBrains PhpStorm. * User: xilix * Date: 24.11.12 * Time: 23:32 */ /** * @package Modules * @subpackage AdministratorScreens */ class MymoduleController extends ActionsController { function mymodule(){ } function main(){ $Register = &Register::getInstance(); /*@var $Register Register*/ $smarty = &$Register->get(VAR_SMARTY); /*@var $smarty Smarty*/ //   ,     //           } } ActionsController::exec('MymoduleController'); ?> 


テキストmymoduleがある mymodule.phpの場所に注意する必要があります。 モジュールの名前と一致する必要があります。 そうしないと、何も機能しません。

残りはほとんどありません。 つまり、管理者にこのモジュールを見る機会を与えます。 何らかの理由で、この瞬間はすべての同様の記事で省略されており、以前に推測することは容易ではありません。 通常、モジュールは機能しますが、表示されません。 これを見つけるために、webasystコードを徹底的にシャベルする必要がありました。 解決策は次のとおりです。

プレートU_ACCESSRIGHTSを見てください 。 次の行を追加します。

INSERT INTO U_ACCESSRIGHTS SET AR_ID='ADMIN', AR_PATH='/ROOT/SC/FUNCTIONS', AR_OBJECT_ID=SC__209, AR_VALUE=1;

この行の主なものは何ですか? 正解-SC__209 209はモジュールの番号です。

翻訳pgn_mymoduleを追加するために残ります

INSERT INTO `SC_local` (`id`, `lang_id`, `value`, `group`, `subgroup`) VALUES
('pgn_mymodule', 1, ' ', 'general', 'prd'),
('pgn_mymodule', 2, 'My module', 'general', 'prd');


そしてそれだけです。 ここで、 「製品」タブに移動すると、 「マイモジュール」タブ内に表示され、 mymodule.phpのコードが実行されます。

Source: https://habr.com/ru/post/J160313/


All Articles