2

エントリが送信されたときに呼び出される拡張機能を作成しています。
パブリッシュ元にいくつかのフィールドを含むタブを追加したいですか?

拡張機能からこれを行うことはできますか?

EE1.x フックがあることは知っていpublish_form_new_tabs, publish_form_new_tabs_blockます
が、EE 2.x にはこれが必要です。

4

2 に答える 2

2

2.x モジュール API ではこれが可能です。ドキュメントはこちら: http://expressionengine.com/user_guide/development/modules.html

次のような構造で、同じタイプのモジュールと拡張機能を組み合わせることができます。

/system/expressionengine/third_party/addon_name/
    ext.addon_name.php
    言語/
        英語/
            lang.addon_name.php
    mcp.addon_name.php
    mod.addon_name.php
    tab.addon_name.php # API 仕様に従って、ここにフィールドをタブに追加します
    upd.addon_name.php # API 仕様に従って、ここにタブを追加/削除します

ユーザーが拡張機能またはモジュールのいずれかをインストールすると、両方を同時にインストールするかどうかを自動的に尋ねられます。明らかに、パブリッシャーにタブ/フィールドを追加するだけの目的であれば、 mcp および mod クラスは、モジュールを正常にインストールするために必要な最小限のものである可能性があります。

これが良い出発点になることを願っています。

于 2010-12-06T22:57:54.177 に答える
2

最初の答えに追加するには、

私が常に問題を抱えていたことの 1 つadd_layout_tabsは、モジュールの更新ファイル (つまり、.で始まるファイルupd.)のどこでもメソッドを呼び出さないことです。

したがって、更新ファイルの名前がupd.addon_name.php. 次に、install次のようになります (注: 次の関数はすべてAddon_name_upd、更新ファイル内のクラスの一部です。

function install () {

  // ... create databases or any necessary code for your module

  $this->EE->load->library('layout');
  $this->EE->layout->add_layout_tabs($this->tabs(), 'addon_name');

  return TRUE;
}

メソッドの呼び出しに注意してください$this->tabs()。そのメソッドは次のようになります。

function tabs() {
  $tabs['addon_name'] = array(
    'field_1_inside_publish_form' => array(
    'visible'   => 'true',
    'collapse'=> 'false',
    'htmlbuttons'   => 'true',
    'width' => '100%'
    )
  );

  return $tabs;
}

field_1_inside_publish_formは、モジュールの対応するタブ ファイルで定義されるフィールドです (例: ) tab.addon_name.php

install メソッドは、モジュールのタブ構成を含む既存のパブリッシュ レイアウトに新しいタブを保存します。

ただし、次のようにメソッドを呼び出して、更新ファイルの uninstall メソッドに構成を削除するメソッドを追加する必要がありますdelete_layout_tabs

function uninstall() {

  // necessary code to drop your database tables or whatever

 $this->EE->load->library('layout');
 $this->EE->layout->delete_layout_tabs($this->tabs(), 'addon_name');

 return TRUE;

} 

もう 1 つ、私のように開発する場合: ここで少し変更を加え、変更をテストし、戻ってさらにコーディングするとtab.addon_name.php、モジュールが有効になった後にタブ ファイルに新しいフィールドが追加された場合、公開ページの新しいタブに表示されます。その理由はadd_layout_tabs、更新ファイルの install メソッドで呼び出すメソッドを実行する必要があるためです。

ただし、このメソッドは、モジュールを有効にした場合にのみ実行されます。つまり、モジュールを無効にする必要があります。これは、モジュールがデータベース テーブルを追加する場合に面倒です。幸いなことに、更新ファイルの update メソッドで新しいタブ構成をロードすることができます (モジュールの更新の一部として新しいデータベース テーブルを追加または削除するだけでなく)。

アイデアは、以前の構成を削除して構成を追加することです。これにより、モジュールのタブ セクションの新しいフィールドの名前を持つ tabs メソッドが呼び出されます。

したがって、tabs メソッドに次のような「field_2_inside_publish_form」という新しいフィールドがあるとします。

function tabs() {
 $tabs['addon_name'] = array(
    'field_1_inside_publish_form' => array(
    'visible'   => 'true',
    'collapse'=> 'false',
    'htmlbuttons'   => 'true',
    'width' => '100%'
   ),
   'field_2_inside_publish_form' => array(
    'visible'   => 'true',
    'collapse'=> 'false',
    'htmlbuttons'   => 'true',
    'width' => '100%'
   )
 );   
}

次に、更新メソッドでレイアウトを更新できます ( $this->versionudpate ファイルのプロパティを '1.0' から '1.5' に更新したとします。

function update($current='') {
  // don't do anything if the version hasn't changed
  if($current == $this->version) {  
    return FALSE;
  }

  // the version property has  a version higher than current version in db
  // this means the module is being updated.
  if($current < $this->version) {
    // update the tab layout

    // delete old layout
    $this->EE->load->library('layout');
    $this->EE->layout->delete_layout_tabs($this->tabs(), 'addon_name');

    // add new tab layout which calls tabs method with updated code
    $this->EE->load->library('layout');
    $this->EE->layout->add_layout_tabs($this->tabs(), 'addon_name');

  }
  return TRUE;
}   

モジュールのコントロール パネル ページ ファイル (つまり ) で定義されているモジュールのコントロール パネル ページにいるたびに、モジュールの更新ファイルの update メソッドが実行されることに注意してくださいmcp.addon_name.php。モジュールのメイン コントロール パネル ページは、おそらくAddon_name_mcpコントロール パネル ページ ファイルのクラスのインデックス メソッドに対応します。

次のようなリンク uri に対応します。admin.php?S=0&D=cp&C=addons_modules&M=show_module_cp&module=addon_name&method=index

それが役立つことを願っています。ちょっと長文ですが、私は他の誰よりも自分自身の利益のために書いています (モジュールを動作させるのに 3 時間も費やしたからです)。

于 2013-01-13T00:56:56.917 に答える