2

drupal コンテンツとは関係のないデータ (サードパーティ システムから) が入力されたデータ テーブルがあります。データは、承認/不適切としてフラグを立てる必要がある写真に関連しています。

そこで、このコンテンツをモデレートする Drupal 管理モジュールを作成しています。これまでのところ、行ごとに 1 つの写真と他のメタデータを表示する theme('table',...) を使用してテーブルを作成しました。ここで、テーブルにいくつかのフォーム ボタンを含め、それらのボタンによってトリガーされる Ajax アクションをいくつか作成したいと考えています。

この記事はhttp://drupal.org/node/112358に関連しているように見えますが、これが Drupal 6 のやり方ではないことを懸念しています。

できればコアモジュール/フォームオーバーライド機能を使用して、この問題に最善の方法でアプローチする方法について、誰かがアドバイスを提供できますか? Drupal のバージョンは 6.14 です。

4

3 に答える 3

2

カスタム テーマ関数を使用すると、完全にカスタムな方法でコンテンツをレンダリングできます。コンテンツのカスタム テンプレートを作成することもできます。これにはボタンが含まれる場合があります。

hook_theme()を使用すると、独自のコンテンツ タイプを作成してテーマ機能に追加できるため、theme('moderatedimages').

回避策として、モデレート ボタンの HTML をテーブル データに入れ、テーマ テーブルによって出力されるようにします。これにより、独自のテーマ関数を作成する必要がなくなります。

hook_menu()AJAX 呼び出しの場合、カスタム関数を使用して独自のメニュー コールバックを作成する必要があります。(コード スニペットはこのチュートリアルからのものです。)

<?php
function mymodule_products_menu() {

  $items = array();

  $items['products/get'] = array(
    'title' => 'mymodule callback',
    'page callback' => 'mymodule_myfunction',
    'access arguments' => array('access content'),
    'type' => MENU_CALLBACK
  );

  return $items;
}

これにより、関数が呼び出されますmymodule_myfunction()。この関数について覚えておくべきことの 1 つは、結果を出力して終了することです。を使用drupal_json()して応答をエンコードすることができます。

于 2009-11-23T06:36:10.953 に答える
1

私も同じ問題を抱えていました。drupal-directory / modules / menu/menu.admin.incで解決策を見つけました。Form-APIとテーマのみが使用されます!

実装:-scheme-apiを使用してクエリを記述します(テーマ('table'、...)に対して既に実行したと思います)-各行に対して、次のようなフォームを作成します:$ form [$ row-> id] [ 'column_name_1'] = array(...ここでは列の説明->チェックボックス、テキストフィールド...); $ form [$ row-> id] ['column_name_2'] = array(...); -独自のテーマを作成します-funktion、witch use hook_theme_table(すでに行っているので、一部のセルをチェックボックスまたは他のフォーム要素に変更するだけで済みます)。

私は今submit-functionを書いていますが、それは機能しません:-)詳細については、menu-modulを参照してください。

私のコードを雇う:

/**   
  * Form for editing the event types.
  *  
  * @ingroup forms  
  */
  function mymodule_event_type_overview_form() {  
    $vid = variable_get('mymodule_category_vocabulary', '');
    $sql = "SELECT term_data.tid AS tid,
      term_data.name AS tname,
      term_data.vid AS vid,
      term_site_config.color AS color,
      term_site_config.site_enabled AS site_enabled,
      term_site_config.site_shown AS site_shown
      FROM {term_data} term_data
      INNER JOIN {term_site_config} term_site_config 
      ON term_data.tid = term_site_config.tid
      WHERE term_data.vid = %d";

    $result = db_query(db_rewrite_sql($sql), $vid);

  $form = array();   while ($term = db_fetch_object($result)) {
    $form[$term->tid]['tname'] = array(
      '#type' => 'value',
      '#value' => $term->tname,
    );
    $form[$term->tid]['color'] = array(
      '#type' => 'value',
      '#value' => $term->color,
    );
    $form[$term->tid]['enabled'] = array(
      '#type' => 'checkbox',
      '#default_value' => $term->site_enabled,
    );
    $form[$term->tid]['shown'] = array(
      '#type' => 'checkbox',
      '#default_value' => $term->site_shown,
    );

    // Build a list of operations.
    $operations = array();
    $operations['delete'] = l(t('delete'), 'admin/settings/mymodule/eventtype/'. $term->tid .'/delete');
    $operations['edit'] = l(t('edit'), 'admin/settings/mymodule/eventtype/'. $term->tid .'/edit');

    $form[$term->tid]['operations'] = array();
    foreach ($operations as $op => $value) {
      $form[$term->tid]['operations'][$op] = array('#value' => $value);
    }   }
     if (element_children($form)) {
    $form['submit'] = array(
      '#type' => 'submit',
      '#value' => t('Save configuration'),
    );
    $form['reset'] = array(
      '#type' => 'submit',
      '#value' => t('Reset to defaults'),
    );
    if (!empty($_POST) && form_get_errors()) {
      drupal_set_message(t('The settings have not been saved because of the errors.'), 'error');
    }   }else {
    $form['empty'] = array('#value' => t('There are no event types yet.'));   }
     return $form; }

/**  
  * Theme the event type overview form into a table.  
  *
  * @ingroup themeable  
  */
function theme_mymodule_event_type_overview_form($form) {

  $header = array(
    t('Event type'),
    t('Color'),
    array('data' => t('Enabled'), 'class' => 'checkbox'),
    array('data' => t('Shown'), 'class' => 'checkbox'),
    array('data' => t('Operations'), 'colspan' => '2'),   );

  $rows = array();   foreach (element_children($form) as $id) {
    $element = &$form[$id];
    if (isset($element['tname'])) {
      $row = array(
        t($element['tname']['#value']),
        t($element['color']['#value']),
        array('data' => drupal_render($element['enabled']), 'class' => 'checkbox'),
        array('data' => drupal_render($element['shown']), 'class' => 'checkbox'),
        array('data' => drupal_render($element['operations']['delete'])),
        array('data' => drupal_render($element['operations']['edit'])),
      );

    $rows[] = $row;   }   }   $output = '';   if ($rows) {
    $output .= theme('table', $header, $rows);   }   
    $output .= drupal_render($form);   
    return $output; 

}

You will get the html-code of the form if you call drupal_get_form('mymodule_event_type_overview_form');

and don't forget co write following function in mymodule.module:

/ ** * hook_theme()の実装。* / function mymodule_theme(){
return array('mymodule_event_type_overview_form' => array('arguments' => array()、)、); }

楽しんでください:-)Katja

于 2010-06-10T15:34:37.720 に答える
1

なぜ標準の theme_table() 関数を使用しているのですか? 必要なフォーム要素を含む独自のテーマ関数を作成するだけです。テーマ機能の詳細については、こちらこちらをご覧ください。

于 2009-11-20T15:58:45.213 に答える