9.11.1. Rad sa poljima entiteta programatski
Dobijanje vrednosti polja u entitetima je prilično jednostavno, ali postoji nekoliko načina da se to uradi. Pogledajmo kako je najbolje raditi sa vrednostima polja u prilagođenom kodu. Uvek možete pogledati najnovije informacije o radu sa poljima na zvaničnom sajtu:
https://www.drupal.org/docs/8/api/entity-api/working-with-the-entity-api
U ovom članku ćemo pogledati primere rada sa vrednostima.
Nije potrebno da pamtite kako određena polja funkcionišu, uvek se možete vratiti na ovu stranicu i podsetiti se. Vremenom ćete sve više posećivati dokumentaciju i shvatićete koliko je lako raditi sa poljima u Drupalu. Za sada možete sačuvati ovu stranicu u obeleživače da uvek imate šablon za rad.
Rad sa nodovima
Učitavanje nod-a po nid-u:
$nid = 234;
$node_storage = \Drupal::entityTypeManager()->getStorage('node');
$node = $node_storage->load($nid);
Dobijanje id nod-a:
$node->id();
Dobijanje tipa nod-a/entiteta:
$node->bundle();
$entity->getType();
Dobijanje vrednosti polja:
$node->get('title')->value;
$node->get('created')->value;
$node->get('body')->value;
$node->get('body')->summary;
$node->get('field_foo')->value;
$node->get('field_image')->target_id;
Takođe možete koristiti skraćeni zapis za dobijanje vrednosti:
$node->title->value;
$node->created->value;
$node->body->value;
$node->body->summary;
$node->field_foo->value;
$node->field_image->target_id;
Učitavanje određenih nodova po vrednosti polja:
$query = \Drupal::entityQuery('node')
->condition('type', 'article')
->condition('field_terms', 42);
$nids = $query->execute();
$nodes = $node_storage->loadMultiple($nids);
foreach ($nodes as $node) {
print $node->title->value;
$node->set('title', "New title for node");
$node->save();
}
Menjanje vrednosti u poljima:
$node->set('title', "New title");
$node->set('body', array(
'summary' => "Teaser",
'value' => "Long text",
'format' => 'basic_html',
));
$node->save();
Takođe, za polja sa jednom vrednošću možete koristiti skraćeni zapis:
$node->title = 'New title';
$node->field_text = 'text';
Dobijanje vrednosti više polja:
$nids = \Drupal::entityQuery('node')->condition('type', 'album')->execute();
$nodes = Node::loadMultiple($nids);
$data = array();
foreach($nodes as $node) {
$photo = array();
foreach($node->get('field_image')->getValue() as $file){
$fid = $file['target_id']; // dobijanje fid fajla;
$photo[] = \Drupal\file\Entity\File::load($fid)->getFileUri();
}
$data[] = array(
'album_name' => $node->get('field_album_name')->getValue(),
'place' => $node->get('field_place')->getValue(),
'author' => $node->get('field_author')->getValue(),
'photo' => $photo,
);
}
Rad sa poljima fajlova
Fajlovi se dodaju u ostale entitete preko referentnih polja, i kada pristupamo tim poljima možemo dobiti ID fajla i zatim iz ID-a dohvatiti informacije o fajlu.
Dohvatanje fajla po ID-u:
$fid = 42;
$file_storage = \Drupal::entityTypeManager()->getStorage('file');
$file = $file_storage->load($fid);
Dohvatanje objekta fajla iz polja nod-a:
$file = $node->field_image->entity;
Dohvatanje nekih polja fajl objekta:
$file->getFileUri(); // "public://file123.jpg"
// Možete pretvoriti u URL iz URI-ja: file_url_transform_relative(file_create_url($file->getFileUri()));
// "/sites/default/files/public/file123.jpg"
$file->filename->value; // "file123.jpg"
$file->filemime->value; // "image/jpeg"
$file->filesize->value; // 63518 (veličina u bajtovima)
$file->created->value; // 1511206249 (Unix timestamp)
$file->changed->value; // 1511234256 (Unix timestamp)
$file->id();
Možete pogledati dostupne vrednosti svojstava fajla iz tabele file_managed na sledeći način:
echo $file->uid->target_id; // 1
echo $file->uid->value; // Ne radi! Koristite target_id.
echo $file->uid->entity->name->value;
echo $file->uid->entity->timezone->value; // "Asia/Omsk"
Rad sa poljima referenci na entitete
Možete dobiti više vrednosti iz referentnih polja i obraditi ih kroz foreach:
foreach ($node->field_my_entity_reference as $reference) {
print $reference->target_id;
print $reference->entity->title->value;
}
Izmena višestrukog polja referenci na entitete:
$nids = [3,4,5,6];
$node->set('field_my_entity_reference', $nids);
$node->save();
Dodavanje novih vrednosti na polje referenci na postojeće vrednosti:
$nids = [3,4,5,6]; // primer vrednosti
foreach ($nids as $nid) {
$node->field_my_entity_reference[] = [
'target_id' => $nid
];
}
$node->save();
Rad sa paragrafima
$my_paragraph = null;
foreach ($node->get('field_paragraph_reference') as $paragraph) {
if ($paragraph->entity->getType() == 'your_paragraph_type') {
$my_paragraph = $paragraph->entity;
}
}
if (!empty($my_paragraph)) {
print $my_paragraph->field_somefield->value;
print $my_paragraph->title->value; // Ne radi!
}
else {
print "Nod nema ovaj tip paragrafa.";
}
Dohvatanje tipa paragrafa:
$my_paragraph->getType();
Koristićemo ove primere ubuduće za pisanje prilagođenih modula koji rade sa hook-ovima i entitetskim objektima.