Puncte:-1

Cel mai bun mod de a introduce un link intern

drapel ng

Cum pot introduce un link intern care funcționează pentru diferite lungimi de cale și continuă să funcționeze atunci când îmi încarc site-ul pe serverul live?

Să zicem că am o pagină aici http://localhost/site1/web/page1 și vreau să creez un bloc în subsol care are un link către această pagină.

Dacă folosesc un link relativ (de ex. Pagina 1) Va funcționa când voi fi pe această pagină...
http://localhost/site1/web/
Dar nu se va întâmpla dacă sunt pe o cale cu mai multe segmente, de exemplu...
http://localhost/site1/web/about/terms/

Dacă creez un link relativ la server (de ex. /site1/web/page1)
Nu va funcționa când serverul se schimbă...
http://mysite.com/
(Dezvolt site-ul local pe PC-ul meu și când site-ul este terminat îl încarc pe site-ul meu de găzduire).
De asemenea, nu va funcționa dacă doresc să clonez site-ul...
http://localhost/site2/web/

Căi absolute (de ex.http://localhost/site1/web/page1)
De asemenea, nu va funcționa când încep să rulez site-ul pe serverul live.

Am încercat modulul linkit. Funcționează pentru cazurile de mai sus, dar numai pentru unele tipuri de link-uri (de exemplu, nu am putut să funcționeze pentru link-uri către vizualizări).

Modulul patologic a remediat această problemă în Drupal 7, dar nu este încă pregătit pentru Drupal 9.

Am obținut cele mai bune rezultate folosind modulul php (furnizează un filtru pe care îl puteți adăuga la un format text). Dar cred că utilizarea acestui modul este descurajată.

<?php
use Drupal\Core\Link;
use Drupal\Core\Url;
print(Url::fromUserInput('/node/1')->toString());
?> 

Oare îmi lipsește o alternativă mai bună? (Ar fi la îndemână dacă ar exista o modalitate de a face link-uri care sunt relative la directorul „web” drupal.)

Jaypan avatar
drapel de
Blocurile sunt entități de conținut, nu entități de configurare și, prin urmare, de obicei nu sunt migrate între instanțe, ceea ce face din acesta un punct discutabil pentru majoritatea sistemelor, deoarece blocul trebuie creat separat pe fiecare instanță, permițând setarea căii pentru acea instanță specifică. Dacă vă migrați blocurile între mediile locale și mediile la distanță, cum faceți acest lucru?
Kevin avatar
drapel in
Folosiți un bloc de meniu? Ce este în neregulă cu linkurile de meniu? Niciodată nu am avut nicio problemă de conectare într-un WYSIWYG ca acesta.
Jaypan avatar
drapel de
S-ar putea să nu fie un meniu.
drapel ng
@Jaypan Nu vreau să fac modificări direct pe site-ul live, ci în schimb dezvolt site-ul pe computerul meu local și când am remediat toate erorile etc., copiez fișierele pe serverul de la distanță și import baza de date. Deci trebuie doar să schimb detaliile bazei de date în settings.php. Deci blocurile sunt migrate împreună cu restul drupalului. De asemenea, nevoile diferiților mei clienți sunt de obicei destul de asemănătoare, așa că adesea pot reutiliza un site drupal. De aici și necesitatea clonării.
apaderno avatar
drapel us
Ați încercat modulul *Custom Menu Links* care vine cu Drupal core?
drapel ng
@apaderno Da. Folosesc acel modul. Întrebarea mea este mai mult despre link-uri în general. S-ar putea să am un bloc de subsol în care să conțină linkuri către pagini interne (de exemplu, T&C), declarație privind drepturile de autor, numere de telefon. Deci blocul de meniu nu este ideal.
Kevin avatar
drapel in
De ce nu intri pe calea relativă? „/unele/alias”?
drapel ng
@kevin „/some/alias” m-ar duce la „http://localhost/some/alias”. Dar trebuie să merg la „http://localhost/site1/some/alias/”. i.e. Am mai multe site-uri pe același server când dezvolt.
Kevin avatar
drapel in
Calea relativă este independentă de domeniu.
drapel ng
@kevin aceasta este o cale relativă (fără bară oblică): „unele/alias” și este independentă de domeniu, dar nu funcționează dacă se modifică numărul de segmente din cale.
drapel cn
Ambele sunt căi relative. Fără slash este relativ la calea curentă, cu slash este relativ la rădăcina domeniului. Ceea ce încercați să faceți este să difuzați mai multe site-uri din subdosare dintr-un singur domeniu și, da, acest lucru poate deveni dificil pentru conectarea manuală. Nu cred că există o soluție universală, dar din experiența mea, dacă o poți rezolva în configurația serverului web cu rescrieri, este adesea mai ușor să o faci acolo decât să încerci să faci Drupal să mărească fiecare link din site-ul
drapel ng
Mulțumesc @Clive. Poate că nu dezvolt site-urile în mod corect. Din interes, cum dezvoltați site-uri? Lucrezi direct pe site-ul live sau ai doar un site care rulează local, astfel încât să poți avea de ex. `http://localhost/page1` local și apoi `http://mysite.com/page1` pe serverul live? Sau faci altceva?
drapel cn
Lumea mea e puțin diferită, cred; natura site-urilor pe care le construiesc înseamnă că tot conținutul este gestionat de clienți, iar misiunea mea este să mă asigur că arhitectura/implementarea acceptă acest lucru fără a fi nevoie să muți niciodată conținutul (suscrierea bazei de date de producție este o ultimă soluție, deoarece site-ul ar putea să colecteze date în timp ce dezvoltarea are loc). Dacă există o caracteristică nouă, aceasta este creată în cod, conținutul de testare este creat într-un mediu stage/uat și deconectat, apoi caracteristica este transmisă live și conținutul din lumea reală este creat în prod. Pentru dezvoltatorii locali tind să prefer Lando
Puncte:1
drapel de

În Drupal 8+, migrarea bazelor de date nu este recomandată, deoarece va suprascrie orice modificări făcute pe serverul de producție între suprascrieri. În schimb, a fost creat un API de configurare, permițând ca configurarea site-ului - adică setările care definesc ce este un site, ce face și cum funcționează - să fie migrată între instanțe fără a fi nevoie să suprascrieți baza de date. Există, de asemenea, un API de migrare, dar din experiența mea este de obicei mai ușor să recreezi conținut în producție după ce te-ai jucat mai întâi cu el în staging/local decât este să configurezi API-ul de migrare.

Iată un tutorial despre care am scris folosind API-ul de configurare: https://www.morpht.com/blog/drupal-8-configuration-part-1-configuration-api

Dacă aș fi în poziția ta, aș înceta să împing bazele de date în sus și, în schimb, aș trece la utilizarea API-ului de configurare pentru a vă gestiona site-ul în mai multe medii. Apoi vă puteți crea blocul în producție și trageți baza de date în instalația locală pentru a obține acea instanță de bloc în instalația locală.

Dacă nu doriți să treceți la configurația de migrare și ați prefera să continuați să vă ridicați baza de date, atunci cele două soluții pe care le văd sunt:

  1. Folosește filtrul PHP pe care l-ai menționat în postarea ta.
  2. Creați un bloc personalizat prin cod, mai degrabă decât prin interfața de utilizare admin, și creați-vă legătura cu clasa URL așa cum ați arătat cel mai mult.

Deși prima opțiune nu este recomandată, nici întregul proces de împingere a bazei de date în sus, așa că, dacă doriți să ridicați baza de date, mulți folosiți și filtrul de intrare PHP.

drapel ng
Mulțumesc @Jaypan. Voi citi despre asta.Nu am acces la consolă la majoritatea conturilor cPanel de găzduire partajată ale clienților mei (pot doar să încarc fișiere, să folosesc phpmyadmin și să schimb câteva setări). Bănuiesc că „Configuration API” ar putea să nu fie posibilă aici? Fac doar design web ca un hobby și creez site-uri pentru organizații mici, așa că a avea site-urile offline pentru o perioadă scurtă, în timp ce le actualizez, nu este cu adevărat o problemă.
Jaypan avatar
drapel de
Puteți utiliza în continuare API-ul de configurare.

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.