Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Themes & Theming ›

[gelöst]Node-Titel soll manipuliert werden mit preprocess_page_title(&$variables) - brauche Text statt Value einer Text-Liste

Eingetragen von montviso (2188)
am 19.05.2017 - 07:25 Uhr in
  • Themes & Theming
  • Drupal 8.x

Titel eines Templates soll manipuliert werden mit preprocess_page_title(&$variables) .
Klappt soweit gut, nur finde ich einfach nicht, wie ich aus einem Node-Listenfeld den Text raus finde, statt dem Value.
Dieser soll vor den Titel geschrieben werden.

ich habe folgendes getestet:

<?php
$node
->field_name->getValue();
$node->field_name->getString();
$node->field_name->value;
?>

Ich bekomme immer nur den Wert der Option, statt den Text.
Ich finde einfach in allen Dokus nicht die richtige Syntax dafür.

-----Edit: Titel der Frage wurde geändert ------------

‹ zen-subtheme: hinzugefügte region wird nicht angezeigt [gelöst]Node-Titel soll manipuliert werden mit preprocess_page_title(&$variables) - brauche Text statt Value einer Text-Liste ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Hallo,

Eingetragen von Hyp1 (1463)
am 19.05.2017 - 10:46 Uhr

wäre es nicht einfacher die setTitle getTitle Funktionen der Node Entity zu benutzen?
https://api.drupal.org/api/drupal/core!modules!node!src!Entity!Node.php/function/Node%3A%3AsetTitle/8.2.x

Tipp:
$node->field_name müsste ein Array sein wenn das Feld mehrere Werte haben kann!
Daher kann das nicht richtig sein $node->field_name->getValue();

MfG

Robert

  • Anmelden oder Registrieren um Kommentare zu schreiben

$node->field_name->getValue()

Eingetragen von montviso (2188)
am 19.05.2017 - 11:25 Uhr

$node->field_name->getValue(); gibt den Value (key) aus den Optionen wieder.
Das funktioniert schon so.

$node->field_name ist ein Array und irgendwo in seinen tiefsten Innereien gibt es die für diesen Feldtyp erlaubten Werte (Key / Value).
Da könnte ich den Wert - statt Key - im Notfall raus bekommen.
Aber das muß doch eleganter gehen.

Ob $this->set('title', $title); eleganter wäre?
Keine Ahnung...ich dachte, dafür ist die Template-Funktion gedacht.

Der Titel darf ja nur in der Ausgabe an der einen Stelle auf der Oberfläche geändert werden, nicht grundsätzlich für den Node.
Manipuliert diese Funktion nicht den Node in der Datenbank?

Es ändert jedenfalls nicht mein Problem, daß ich erst mal an den Text statt Key der Optionen-Liste kommen muß.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hi, solange nicht

Eingetragen von Hyp1 (1463)
am 19.05.2017 - 12:28 Uhr

Hi,
solange nicht $node->save();
aufgerufen wird wird es nicht gespeichert.
Wenn $node->field_name ein Array ist, was erwartest Du denn dass $node->field_name->getValue() zurückgibt?
Probier mal:
dpm($node->toArray());
dpm(sizeof($node->field_name));
Um den ganzen Node als Array auszugeben und um zu sehen wieviele Werte Dein Feld hat.
Ich denke es müsste eher so etwas sein.
$node->field_name[0---x]->getString();

PS:
Ich habe nicht viel Erfahrung mit D8

  • Anmelden oder Registrieren um Kommentare zu schreiben

"Ich habe nicht viel

Eingetragen von montviso (2188)
am 19.05.2017 - 14:54 Uhr

"Ich habe nicht viel Erfahrung mit D8"
Haha....da sind wir schon zu Zweit. ;-)

Ich versuche es noch mal besser darzustellen.
ich habe eine Feld mit einer mehrzeiligen Text-Liste:

<select>
<option value='key1'>value 1</option>
<option value='key2'>value 2</option>
<option value='key3'>value 3</option>
</select>

Die o.g. Funktionen, die ich getestet habe (weil so dokumentiert) machen den gleichen Fehler:
Sei liefern den key, aber nicht den value.

Ich brauche eine Funktion, die statt dem Key den Value ausgeben.
Das sollt eigentlich möglich sein, ohne mehrstufig verschachtelten Arrays nachzuspüren.

Ich habe einfach noch nicht die richtige Syntax gefunden - trotz stundenlangem Suchen.
Vielleicht liest ja auch noch jemand mit, der sowas in Drupal 8 schon mal gemacht hat.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hmm,dieser HTML Code ist

Eingetragen von Hyp1 (1463)
am 19.05.2017 - 17:18 Uhr

Hmm,

dieser HTML Code ist aber für ein Single Select Feld!
Wenn das Feld mehrere hat, Werte müsste das Select doch ein "multiple" Attribut haben.
Ist es denn nun ein Feld das mehrere Werte haben kann oder nur einen?

  • Anmelden oder Registrieren um Kommentare zu schreiben

PS: field_name->getLabel(); h

Eingetragen von Hyp1 (1463)
am 19.05.2017 - 17:36 Uhr

PS:
field_name->getLabel();
https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Field%21FieldConfigBase.php/function/FieldConfigBase%3A%3AgetLabel/8.2.x

  • Anmelden oder Registrieren um Kommentare zu schreiben

Das Select Feld kann nur

Eingetragen von montviso (2188)
am 19.05.2017 - 20:10 Uhr

Das Select Feld kann nur einen Wert haben.

Hoi...das mit dem getLabel() klingt gut.
Werde ich morgen testen.
Heute ist Feierabend, danke jedenfalls schon mal!

  • Anmelden oder Registrieren um Kommentare zu schreiben

Jetzt habe ich es

Eingetragen von montviso (2188)
am 20.05.2017 - 16:39 Uhr

Jetzt habe ich es getestet:
Mit getLabel() wird die das Label der Select-Box ausgegeben - wie ich befürchtet habe.
Mit getName() wird der Feldname ausgegeben.
Sowas wie getText() scheint es nicht zu geben.
Jedenfalls finde ich nichts.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hallo, in Views wirst Du nur

Eingetragen von Hyp1 (1463)
am 20.05.2017 - 17:43 Uhr

Hallo, in Views wirst Du nur die Value(index) bekommen da in der DB nur dieser Wert gepeichert wird.
Woher kommen denn die Optionen des Select Feldes ?
Sollten Sie statisch sein hast Du ja den Index und kennst Die dazu gehörigen Strings.

MfG

Robert

  • Anmelden oder Registrieren um Kommentare zu schreiben

Von Views war nie die

Eingetragen von montviso (2188)
am 20.05.2017 - 19:24 Uhr

Von Views war nie die Rede.
Es handelt sich um einen Node, der ausgegeben wird.

Das Feld ist ein Listen-Feld (Text) dieses Node-Typs.

Wie kommst Du darauf, daß der Wert nicht in der DB gespeichert wird?
Der ist das schon gespeichert.
Ich schrieb ja, daß irgendwo in der tiefsten Verschachtelung der $variables auch ein array mit allowed fields mit key/value Paaren angegeben ist.
Dort könnte ich das ja raus holen.

Und natürlich könnte ich die Werte auch in der Function fest eintragen und mit dem Key ermitteln.
Die Werte werden vielleicht einmal im Jahr ergänzt.

Aber das ist doch keine saubere Lösung.
Ich bin sicher, die gibt es, ich kenne sie nur noch nicht.
Ich gehe jetzt mal zu stackexchange.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Sorry,mein Fehler es ging

Eingetragen von Hyp1 (1463)
am 20.05.2017 - 20:43 Uhr

Sorry,
mein Fehler es ging gar nicht um einen Views Hook.
das hatte ich wohl falsch gelesen.
Wie ich darauf komme dass das Label der Select Option nicht in der DB gespeichert wird?
Das liegt daran wie ein Post Request einer solchen Form ausgeführt wird und
dabei werden bei einem Single Select Field eigentlich nur der Name des Select Feldes und die Value(bzw. index) der Option
gesendet.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ja, Du hast ja recht...da muß

Eingetragen von montviso (2188)
am 22.05.2017 - 08:32 Uhr

Ja, Du hast ja recht...da muß ich mich auch erst dran gewöhnen, daß nicht alles in der Daba steht.

Also, ich denke mal laut vor mich hin:
die Option-Labels stehen in der Datei field.storage.node.field_name.yml

settings:
  allowed_values:
    -
      value: key1
      label: 'Value 1'
    -
      value: key2
      label: 'Value 2'
    -
            value: key2
      label: 'Value 2''

Man bräuchte also sowas in der Art:

<?php
$mystring
= $node->field_name->getValue()->getLabel();
?>

Das wirft einen Fehler aus.
Aber irgendwie in die Richtung muß es gehen.
Jetzt habe ich jedenfalls eine Idee, welchen Teil der Doku ich brauche.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Jetzt habe ich alles zusammen

Eingetragen von montviso (2188)
am 22.05.2017 - 09:00 Uhr

Jetzt habe ich alles zusammen gebaut. ;-)
Danke Hyp1 für den Anstoß, die Config außerhalb der Datenbank zu suchen.
Theoretisch weiß ich das ja, aber dann bin ich doch wieder in die alte Denke gefallen.

So sieht das jetzt komplett aus:

<?php
function theme_preprocess_page_title(&$variables) {
   
   
$parameters = \Drupal::routeMatch()->getParameters()->all();

   
//nur bei Nodes
   
if (isset($parameters['node'])) {
               
        if(
$node = \Drupal::routeMatch()->getParameter('node')){
           
           
//nur bei bestimmtem Inhaltstyp
           
if ( ($node->bundle() == 'my-node-type') ) {

               
//hole option-key
               
$fieldnamekey = $node->field_fieldname->getString();

               
//hole erlaubte Werte fuer dieses Listen-Feld
               
$fieldname = $node->field_fieldname->getSettings()['allowed_values'];
               
               
//hole Option-Label
               
$fieldvalue = $fieldname[$fieldnamekey];

               
$string = "<div id='uebersicht'><a href='/fieldname/".$fieldnamekey."'><i aria-hidden='true' class='fa fa-th'></i></a></div>";
               
               
$variables['title'] = Drupal\Core\Render\Markup::create($string."<span class='fieldname'>".$fieldvalue."</span>".$variables['title']);
            }
        }
    }
}

?>

Die Feinheiten der HTML-Container brauchen noch Nachbarbeit, aber jetzt habe ich alle Bausteine.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hallo, müsste getValue nicht

Eingetragen von Hyp1 (1463)
am 22.05.2017 - 09:03 Uhr

Hallo,

müsste getValue nicht ein array für das Select Field zurückgeben ?
$myarray = $node->field_name->getValue();

MfG

Robert

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ja, das gibt ein Array

Eingetragen von montviso (2188)
am 22.05.2017 - 13:53 Uhr

Ja, das gibt ein Array zurück, nur leider nicht mit den gewünschten Werten.
Es gibt nur 0 und value als Keys.
So $node->field_name->getValue()['0']['value'] bekommt man genau das Gleiche, wie mit $node->field_name->getString().
Die Konfigurationswerte sind viel tiefer verschachtelt im Array $variables zu finden.
Das geht besser mit der settings-Methode.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • für drupal11 ein Slider Modul
  • [gelöst] W3CSS Paragraphs Views
  • Drupal 11 neu aufsetzen und Bereiche aus 10 importieren
  • Wie erlaubt man neuen Benutzern auf die Resetseite zugreifen zu dürfen.
  • [gelöst] Anzeigeformat Text mit Bild in einem Artikel, Drupal 11
  • Social Media Buttons um Insteragram erweitern
  • Nach Installation der neuesten D10-Version kein Zugriff auf Website
  • Composer nach Umzug
  • [gelöst] Taxonomie Begriffe zeigt nicht alle Nodes an
  • Drupal 11 + Experience Builder (Canvas) + Layout Builder
  • Welche KI verwendet ihr?
  • Update Manger läst sich nicht Installieren
Weiter

Neue Kommentare

  • melde mich mal wieder, da ich
    vor 1 Tag 7 Stunden
  • Hey danke
    vor 2 Tagen 2 Stunden
  • Update: jetzt gibt's ein
    vor 2 Tagen 20 Stunden
  • Hallo, im Prinzip habe ich
    vor 1 Woche 6 Stunden
  • Da scheint die Terminologie
    vor 1 Woche 9 Stunden
  • Kannst doch auch alles direkt
    vor 1 Woche 4 Tagen
  • In der entsprechenden View
    vor 1 Woche 4 Tagen
  • Dazu müsstest Du vermutlich
    vor 1 Woche 4 Tagen
  • gelöst
    vor 4 Wochen 1 Tag
  • Ja natürlich. Dass ist etwas,
    vor 4 Wochen 2 Tagen

Statistik

Beiträge im Forum: 250233
Registrierte User: 20449

Neue User:

  • Mroppoofpaync
  • 4aficiona2
  • AppBuilder

» Alle User anzeigen

User nach Punkten sortiert:
wla9461
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3857
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 0 User und 17 Gäste online.

Hauptmenü

  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche

Quicklinks I

  • Infos
  • Drupal Showcase
  • Installation
  • Update
  • Forum
  • Team
  • Verhaltensregeln

Quicklinks II

  • Drupal Jobs
  • FAQ
  • Drupal-Kochbuch
  • Best Practice - Drupal Sites - Guidelines
  • Drupal How To's

Quicklinks III

  • Tipps & Tricks
  • Drupal Theme System
  • Theme Handbuch
  • Leitfaden zur Entwicklung von Modulen

RSS & Twitter

  • Drupal Planet deutsch
  • RSS Feed News
  • RSS Feed Planet
  • Twitter Drupalcenter
Drupalcenter Team | Impressum & Datenschutz | Kontakt
Angetrieben von Drupal | Drupal is a registered trademark of Dries Buytaert.
Drupal Initiative - Drupal Association