Пользовательское составное поле CCK - Как отображать отдельные подполя в представлениях? - PullRequest
1 голос
/ 31 августа 2010

В Drupal 6 я создал простой модуль составного поля Pricing CCK с подполем «стоимость» и «продукт» на основе этого превосходного учебника: http://www.poplarware.com/articles/cck_field_module

function usginpricing_field_settings($op, $field) {
  switch ($op) {
    case 'database columns':
      $columns['cost'] = array('type' => 'varchar', 'length' => 255, 'not null' => FALSE, 'sortable' => TRUE, 'default' => '', 'views' => TRUE);
      $columns['product'] = array('type' => 'varchar', 'length' => 1000, 'not null' => FALSE, 'sortable' => TRUE, 'default' => '', 'views' => TRUE);
      return $columns;
  }
}

Я могу получить составные значения в представлениях, но как я могу извлечь отдельные подполя? Пока я знаю только, где изменить ответ (реализация CCK hook_field () - case 'views data':) для Views, но в остальном я в тупике:

function usginpricing_field($op, &$node, $field, &$items, $teaser, $page) {
  switch ($op) {
    // Do validation on the field values here. The widget
    // will do its own validation and you cannot make any
    // assumptions about what kind of widget has been used,
    // so don't validate widget values, only field values.
    case 'validate':
      if (is_array($items)) {
        foreach ($items as $delta => $item) {
          if ($item['cost'] != '' && !is_numeric(trim($item['cost']))) {
            form_set_error($field['field_name'],t('"%name" is not a valid numeric value',array('%name' => $item['cost'])));
          }
        }
     }
     break;

    case 'sanitize':
      foreach ($items as $delta => $item) {
        foreach ($item as $col => $dat) {
          $items[$delta]['safe_' . $col ] = check_plain($item[ $col ]);
        }
      }
      break;

    // Optional: Make changes to the default $data array
    // created for Views. Omit this if no changes are
    // needed, use it to add a custom handler or make
    // other changes.
    case 'views data':
  // UNFINISHED
      // Start with the $data created by CCK
      // and alter it as needed. The following
      // code illustrates how you would retrieve
      // the necessary data.
      $data = content_views_field_views_data($field);
      $db_info = content_database_info($field);
      $table_alias = content_views_tablename($field);
      $field_data = $data[$table_alias][$field['field_name'] .'_value'];

      // Make changes to $data as needed here.

      return $data;

  }
}

Буду признателен за любой совет или пример кода!

...