Puncte:0

Specificați tema când creați conținut/importați conținut prin Feeds

drapel cn

Vreau să forțez ca tot conținutul să fie creat folosind tema principală a site-ului meu. Vreau să fac asta pentru că folosesc un renderer în MYMODULE_node_presave() ca aceasta:

funcția MYMODULE_node_presave(NodeInterface $nod) {
  $renderer = \Drupal::service('renderer');

  $content_type = $node->getType();
  if ($content_type == 'pagina') {
    $viewmode_render = $node->get('field_text_main_to_render')
      ->view('rendered_output');
    $processed_display = $renderer->renderPlain($viewmode_render);
    $nod->set('field_text_main_display', "$processed_display");
    $node->field_text_main_display->format = 'procesat';
}

Site-ul meu folosește Bartik ca temă principală și Seven ca temă de administrare.

Sub Setări aspect (/admin/appearance), am verificat preferința Utilizați tema de administrare atunci când editați sau creați conținut. Acest lucru asigură că nodurile sunt redate în Bartik la crearea în UI.

Cu toate acestea, când resavez nodurile pe /admin/conținut, nodurile sunt re-salvate cu Seven, în loc de Bartik. Așa că am adăugat un TemaNegociator:

/**
 * Selectați tema corectă pentru diferite rute.
 */
clasa ThemeNegotiator implementează ThemeNegotiatorInterface {

  /**
   * {@inheritDoc}
   */
  se aplică funcția publică (RouteMatchInterface $route_match) {
    returnează $this->negotiateRoute($route_match) ? ADEVARAT FALS;
  }

  /**
   * {@inheritDoc}
   */
  funcția publică determineActiveTheme(RouteMatchInterface $route_match) {
    return $this->negotiateRoute($route_match) ?: NULL;
  }

  /**
   * Selectați tema pentru cazuri speciale.
   *
   * @param \Drupal\Core\Routing\RouteMatchInterface $route_match
   * Ruta potrivită în prezent.
   *
   * @return bool|șir
   * Numele temei de utilizat (șir) sau fals (bool).
   */
  funcție privată negotiateRoute(RouteMatchInterface $route_match) {
    $route_name = $route_match->getRouteName();
    // Pagina de conținut de administrator trebuie să folosească tema de randare a nodului.
    // De ce: acțiunea „Salvare conținut” va folosi tema acestei pagini.
    dacă ($nume_rută === 'system.admin_content') {
      returnează „bartik”;
    }
    else {
      returnează FALSE;
    }
  }

}

Acum, când rulez un nod în bloc resave on /admin/conținut, nodurile sunt redate corect cu Bartik.

Apoi, am instalat Furaje modul. Acum, când import noduri prin CSV folosind Feeds, acestea sunt redate folosind Seven, nu Bartik. Vreau să forțez ca aceste noduri să fie redate folosind Bartik, dar nu știu cum să fac asta. (De exemplu, dacă a existat o modalitate de a utiliza negotiateRoute în TemaNegociator, ar fi bine, dar nu știu cum să configurez asta.) Aveți idei?

4uk4 avatar
drapel cn
Aș folosi negociatorul de temă într-o sub-cerere, în care controlerul returnează un răspuns cu nodul redat. Vedeți asta ca exemplu cum să faceți o sub-cerere și, de asemenea, cum să evitați o eroare de bază: https://drupal.stackexchange.com/questions/303396/making-an-http-subrequest-causes-currentroutematch-to-have- traseul-greșit
Puncte:0
drapel de

Conținutul poate fi redat în orice temă și este redat în tema curentă în orice moment dat. Nu salvați conținutul ca aparținând unei teme. Mai degrabă, dacă doriți diferite teme pentru a afișa conținut, puteți încerca Modul de schimbare a temei paginii.

drapel cn
„Nu salvezi conținutul ca aparținând unei teme.” Da, în general, acesta este cazul. Dar, așa cum am spus în întrebarea mea, folosesc `hook_node_presave()` pentru a reda unele câmpuri și a salva rezultatul randat, care salvează conținutul ca aparținând unei anumite teme. Așa că trebuie să controlez ce temă este folosită pentru a reda conținutul pentru această salvare specifică de conținut.
Jaypan avatar
drapel de
Aceste elemente vor fi redate în tema curentă în momentul redării. În cazul dvs., aceasta este probabil pe calea în care are loc importul, așa că puteți utiliza modulul de mai sus pentru a seta tema pentru calea de alimentare. Acestea fiind spuse, nu pare un design arhitectural grozav să stocați codul HTML redat - ce se întâmplă dacă doriți să vă schimbați tema în viitor sau să căutați în acel câmp. De obicei, veți dori să stocați date și să randați la ieșire, memorând în cache rezultatul randat dacă este o construcție costisitoare. Eu personal aș lua în considerare restructurarea arhitecturală decât manipularea temei.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.