2009-11-20 3 views
2

내가 (타사 시스템에서) 드루팔 내용과 관련이없는 데이터로 채워되는 데이터 테이블이있는 드루팔 형태의 요소를 포함합니다. 데이터는 부적절한 것으로 승인/신고되어야하는 사진과 관련됩니다.어떻게 데이터 테이블

그래서 나는이 내용을 완화해야 드루팔 관리 모듈을 쓰고 있어요. 지금까지는 테마 ('table', ...)를 사용하여 테이블을 만들었습니다.이 테이블은 다른 메타 데이터와 함께 행당 1 장의 사진을 보여줍니다. 이제 테이블에 몇 가지 양식 버튼을 포함시키고 해당 버튼에 의해 트리거되는 Ajax 작업을 구현하려고합니다.

이 문서 http://drupal.org/node/112358 관련 보이지만 나는이 일을 드루팔 6 방법이 아니다 걱정.

는 사람이 가장이 문제를 접근하는 방법에 대한 몇 가지 조언을 제공 할 수 - 바람직 핵심 모듈/폼 오버라이드 기능을 사용하여. Drupal 버전은 6.14입니다.

답변

2

사용자 지정 테마 기능을 사용하면 완전히 사용자 지정 방식으로 콘텐츠를 렌더링 할 수 있습니다. 콘텐츠에 대한 맞춤 템플릿을 만들 수도 있습니다. 여기에는 버튼이 포함될 수 있습니다.

hook_theme() 당신이 theme('moderatedimages')을 가질 수 있도록 자신 만의 콘텐츠 유형을 테마 기능에 추가 할 수있게합니다.

해결 방법은 테마 테이블로 출력되도록 테이블 데이터에 중간 버튼의 HTML을 넣어하는 것입니다. 이렇게하면 자신 만의 테마 기능을 작성하지 않아도됩니다. AJAX를 들어

hook_menu() 및 사용자 정의 기능을 사용하여 자신 만의 메뉴 콜백을 구축 할 필요가 호출합니다. (코드 조각은 this 튜토리얼입니다.)

<?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()를 호출합니다. 이 함수에 대해 기억해야 할 것은 결과를 출력하고 종료하고 싶다는 것입니다. 응답을 인코딩하려면 drupal_json()을 사용하는 것이 좋습니다.

1

왜 표준 theme_table() 함수를 사용하고 있습니까? 필요한 양식 요소가 포함 된 테마 기능을 만드십시오. 테마 기능에 대한 자세한 내용은 herehere입니다.

+0

감사를 가지고 있지만 정말 도움이되지 않습니다. 나는 드루팔 (Drupal)에 익숙하지 않기 때문에 문서에 대한 링크 이상의 도움이 필요하다. 몇 가지 기본 단계와 의사 코드로 어떤 의미인지 설명해 주시겠습니까? 감사! – codecowboy

1

나는 동일한 문제가있었습니다. drupal-directory/modules/menu/menu.admin.inc에서 해결책을 찾았습니다. Form-API와 Themes는 오직 사용됩니다!

구현 : $ 양식 [: 계획-API를 기입의 쿼리는 다음과 같이 양식을 만들 각 행를 위해 본 (난 당신이 테마 ('테이블', ...) 이미 그것을했다고 생각) $ row-> id] [ 'column_name_1'] = array (... 여기 열의 설명 -> checkbox, textfield ...); $ form [$ row-> id] [ 'column_name_2'] = 배열 ​​(...); - 자신의 테마를 사용하여 funktion을 사용합니다. 마녀가 hook_theme_table을 사용합니다. 이미 완료 했으므로 일부 셀을 확인란이나 다른 폼 요소로 변경하면됩니다.

제출 기능을 지금 쓰지 만 않습니다. 't work :-) 자세한 내용은 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; 

} hook_theme의

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: 

/** * 구현(). */mymodule_theme 함수() {
창 어레이 ( 'mymodule_event_type_overview_form'=> 어레이 ( '인자'=> 어레이()를 ) ); }

재미 :-) 카차에게 답장을 보내