it-swarm.com.de

Warum erhalte ich den Fehler "Unbekannte Dateneigenschaft", wenn das Feld vorhanden ist?

Ich versuche, alle Felder eines Knotens zu erfassen (was ich mit array_keys mache). An dieser Stelle möchte ich sie alle an entity_metadata_wrapper() weiterleiten und ihre Werte erfassen.

Wenn es sich um Zeichenfolgen handelt, drucke ich sie dann mit der Funktion Text() von TCPDF in ein PDF) Dokument.

Alles sieht so aus, als würde es richtig funktionieren. Bestimmte Felder geben jedoch einen Fehler als solchen aus:

EntityMetadataWrapperException: Unbekannte Dateneigenschaft field_grade. in EntityStructureWrapper-> getPropertyInfo ()

Das Feld existiert jedoch in meinem Knoten.

'field_grade' => 
    array (size=13)
      'default_value' => null
      'description' => string '' (length=0)
      'display' => 
        array (size=4)

Dies ist der Code, den ich verwende.

$wrapper = entity_metadata_wrapper('node', $node);
$trip_fields = field_info_instances('node', 'trip');
$trip_fieldskeys = array_keys($trip_fields);
$margintop = 0;

foreach($trip_fieldskeys as $item) {
  $value = $wrapper->$item->value();
  if (gettype($value) == "string") {
    $pdf->Text(0, $margintop, $value, false, false, true, 0, 0,
       '', false, '', 0, false, 'T', 'M', false);
    $margintop = $margintop + 25;
  }
}
6
Jack Ryan

Wenn es sich um ein benutzerdefiniertes Feld handelt, das Sie in Ihrem Modul definiert haben (mit hook_field_info()), müssen Sie Ihren Feldinformationen ein property_type Hinzufügen. Ein Beispiel finden Sie unter https://www.drupal.org/docs/7/api/entity-api/property-info-for-fields und https: //www.drupal .org/node/90558 für eine vollständige Liste möglicher Typen.

Wenn Ihr Feld eine komplexe (mehrwertige) Datenstruktur ist, müssen Sie möglicherweise zusätzlich property_callbacks Einschließen. Ein gutes Beispiel hierfür finden Sie unter http://d7.thecarneyeffect.co.uk/describe-field-properties-make-custom-fields-work-entity-metadata-wrappers .

3
Martin Q

Ich habe die FPDI-Bibliothek für PDF Erstellung für einen bestimmten Inhaltstypknoten verwendet

    /* PDf Creationg Start */
    $pdf=new PDF_HTML_Table();  
    $pdf->AddPage('L');
    $pdf->SetXY(10.0,5.0);
    $pdf->SetDisplayMode('fullwidth');
    $pdf->SetLeftMargin(4.0);
    $pdf->SetTitle('Your Title',false);
    $pdf->SetFont('Arial','',7);
    $pdf->SetFontSize(12);
    $title_page = 'Dated : '.date('jS F Y');    
    $pdf->Text(10,28,$title_page);          
    $pdf->SetFontSize(7);
    $header=array('your_field_no1','your_field_no2','your_field_no_n..');
    $rows = array();    

  /* Get Node Content */
$query = new EntityFieldQuery();
$query->entityCondition('entity_type', 'node')
  ->entityCondition('bundle', 'your_content_type_name')               
  ->propertyCondition('status', 1, '=')
  ->propertyOrderBy('created','DESC')
  ->fieldCondition('field_name', 'value', $_GET['mname'],'=');
  $results = $query->execute();     

    if (isset($results['node'])) {
      $nodes = node_load_multiple(array_keys($results['node']));
       $counter = 0;          
      foreach($nodes as $row) {
          $data = array();  
        if(sizeof($row->your_field_no1) > 0)
            {
                $your_data_array[] = $row->your_field_no1['und'][0]['value'];
            }

       if(sizeof($row->your_field_no2) > 0)
            {
                $your_data_array[] = $row->your_field_no2['und'][0]['value'];
            }
         // and so on..
         $rows[] = $data;
      }

    }  
   $pdf->Ln(35);
        $pdf->SetFont('Arial','',9);
        $pdf->SetWidths(array(40,40,40,40,40,40,50));
        $pdf->SetAligns('C');           
        $pdf->FilterRow($data_header);
        $pdf->SetWidths(array(40,40,40,40,40,40,50)); 
        $pdf->FilterRow($data); 
   $filename = "your_desired_name_plus_".date('jS-F-Y-h-i-s').'.pdf';
   $pdf->Output($filename,"D");

und es funktioniert auf meiner Seite ... hoffe, das hilft

1
Kamal Oberoi

Schwerwiegende PHP-Fehler beim Aufrufen von $wrapper->field_foo->value() auf einem leeren $ Wrapper. Sie müssen überprüfen, ob der Knoten dieses Feld hat, bevor Sie $wrapper->field_foo->value() aufrufen. Seien Sie bei dieser Ausnahmebehandlung vorsichtig mit EntityMetadataWrapper. Und Sie können versuchen mit:

$wrapper = entity_metadata_wrapper('node', $node);// you need sure with varibale $node
foreach ($wrapper->getPropertyInfo() as $key => $val) {
    $value = $wrapper->$key->value();
    if (gettype($value) == "string") {
   $pdf->Text(0, $margintop, $value, false, false, true, 0, 0,
       '', false, '', 0, false, 'T', 'M', false);
   $margintop = $margintop + 25;
   }
  }
1
MrD