Score:-1

วิธีที่ดีที่สุดในการเข้าสู่ลิงก์ภายใน

ธง ng

ฉันจะป้อนลิงก์ภายในที่ใช้งานได้สำหรับเส้นทางที่มีความยาวต่างกันและทำงานต่อไปเมื่อฉันอัปโหลดเว็บไซต์ไปยังเซิร์ฟเวอร์จริงได้อย่างไร

บอกว่าฉันมีเพจที่นี่ http://localhost/site1/web/page1 และฉันต้องการสร้างบล็อกในส่วนท้ายที่มีลิงก์ไปยังหน้านี้

หากฉันใช้ลิงก์สัมพัทธ์ (เช่น หน้าที่ 1) มันจะทำงานเมื่อฉันอยู่ในหน้านี้ ...
http://localhost/site1/web/
แต่จะไม่เป็นเช่นนั้นหากฉันอยู่บนเส้นทางหลายส่วน เช่น ...
http://localhost/site1/web/about/terms/

หากฉันสร้างลิงก์ที่เกี่ยวข้องกับเซิร์ฟเวอร์ (เช่น /site1/web/page1)
มันจะไม่ทำงานเมื่อเซิร์ฟเวอร์เปลี่ยน ...
http://mysite.com/
(ฉันพัฒนาไซต์ในเครื่องคอมพิวเตอร์ของฉัน และเมื่อไซต์เสร็จสิ้น ฉันจะอัปโหลดไปยังไซต์โฮสติ้งของฉัน)
นอกจากนี้ มันจะไม่ทำงานหากฉันต้องการโคลนไซต์...
http://localhost/site2/web/

เส้นทางสัมบูรณ์ (เช่นhttp://localhost/site1/web/page1)
จะไม่ทำงานเมื่อฉันเริ่มใช้งานไซต์บนเซิร์ฟเวอร์จริง

ฉันลองลิงค์โมดูล ใช้ได้กับกรณีข้างต้นแต่ใช้ได้กับลิงก์บางประเภทเท่านั้น (เช่น ฉันไม่สามารถใช้กับลิงก์ไปยังมุมมองต่างๆ ได้)

พยาธิสภาพของโมดูลแก้ไขปัญหานี้ใน Drupal 7 แต่ยังไม่พร้อมสำหรับ Drupal 9

ฉันได้ผลลัพธ์ที่ดีที่สุดโดยใช้โมดูล php (มีตัวกรองที่คุณสามารถเพิ่มในรูปแบบข้อความได้) แต่ฉันเชื่อว่าการใช้โมดูลนี้เป็นสิ่งที่ขมวดคิ้ว

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

ฉันไม่มีทางเลือกอื่นที่ดีกว่านี้หรือ? (จะสะดวกหากมีวิธีสร้างลิงก์ที่เกี่ยวข้องกับไดเร็กทอรี 'web' ของ drupal)

Jaypan avatar
de flag
บล็อกคือเอนทิตีเนื้อหา ไม่ใช่เอนทิตีการกำหนดค่า ดังนั้นโดยปกติแล้วจะไม่ถูกย้ายระหว่างอินสแตนซ์ ทำให้เป็นจุดที่สงสัยสำหรับระบบส่วนใหญ่ เนื่องจากบล็อกต้องสร้างแยกกันในแต่ละอินสแตนซ์ ทำให้สามารถกำหนดพาธสำหรับอินสแตนซ์นั้นๆ ได้ หากคุณกำลังย้ายบล็อกของคุณระหว่างสภาพแวดล้อมแบบโลคัลและสภาพแวดล้อมแบบรีโมต คุณกำลังดำเนินการนี้อย่างไร
Kevin avatar
in flag
ใช้บล็อคเมนู? เกิดอะไรขึ้นกับลิงก์เมนู ฉันไม่เคยมีปัญหาในการเชื่อมโยงใน WYSIWYG เช่นนี้มาก่อน
Jaypan avatar
de flag
อาจไม่ใช่เมนู
ng flag
@Jaypan ฉันไม่ต้องการแก้ไขโดยตรงบนไซต์สด แต่พัฒนาไซต์บนพีซีในพื้นที่ของฉันแทน และเมื่อฉันแก้ไขข้อบกพร่องทั้งหมด ฯลฯ ฉันจะคัดลอกไฟล์ข้ามไปยังเซิร์ฟเวอร์ระยะไกลและนำเข้าฐานข้อมูล ดังนั้นฉันแค่ต้องเปลี่ยนรายละเอียดฐานข้อมูลใน settings.php ดังนั้นบล็อกจึงถูกโยกย้ายไปพร้อมกับ drupal ที่เหลือ นอกจากนี้ ความต้องการของลูกค้าที่หลากหลายของฉันมักจะค่อนข้างคล้ายกัน ดังนั้นฉันจึงมักจะใช้ไซต์ drupal ซ้ำได้ ดังนั้นจำเป็นต้องโคลน
apaderno avatar
us flag
คุณลองใช้โมดูล *Custom Menu Links* ที่มาพร้อมกับ Drupal core หรือไม่
ng flag
@apaderno ครับ ฉันใช้โมดูลนั้น คำถามของฉันเกี่ยวกับลิงก์โดยทั่วไป ฉันอาจมีบล็อกส่วนท้ายซึ่งมีลิงก์ไปยังหน้าภายใน (เช่น T&Cs) ข้อความเกี่ยวกับลิขสิทธิ์ หมายเลขโทรศัพท์ บล็อกเมนูจึงไม่เหมาะ
Kevin avatar
in flag
ทำไมคุณไม่เข้าสู่เส้นทางสัมพัทธ์? "/บางคน/นามแฝง"?
ng flag
@kevin "/some/alias" จะพาฉันไปที่ "http://localhost/some/alias" แต่ฉันต้องไปที่ "http://localhost/site1/some/alias/" เช่น. ฉันมีหลายไซต์บนเซิร์ฟเวอร์เดียวกันเมื่อฉันกำลังพัฒนา
Kevin avatar
in flag
เส้นทางสัมพัทธ์ไม่ขึ้นกับโดเมน
ng flag
@kevin นี่เป็นเส้นทางสัมพัทธ์ (ไม่มีเครื่องหมายทับ): "some/alias" และไม่ขึ้นกับโดเมน แต่ใช้งานไม่ได้หากจำนวนเซกเมนต์ในเส้นทางเปลี่ยนไป
cn flag
ทั้งสองเป็นเส้นทางสัมพัทธ์ หากไม่มีเครื่องหมายทับจะสัมพันธ์กับเส้นทางปัจจุบัน โดยที่เครื่องหมายทับจะสัมพันธ์กับโดเมนรูท สิ่งที่คุณกำลังพยายามทำคือให้บริการหลายไซต์จากโฟลเดอร์ย่อยในโดเมนเดียว และใช่ การลิงก์ด้วยตนเองอาจทำให้ลำบากใจ ฉันไม่เชื่อว่ามีวิธีแก้ไขปัญหาที่เป็นสากล แต่จากประสบการณ์ของฉัน หากคุณสามารถแก้ไขได้ในการกำหนดค่าเว็บเซิร์ฟเวอร์ด้วยการเขียนใหม่ มักจะทำได้ง่ายกว่าการพยายามให้ Drupal ขยายทุกลิงก์ใน งาน
ng flag
ขอบคุณ @ไคลฟ์ ฉันอาจจะไม่ได้พัฒนาเว็บไซต์ด้วยวิธีที่ถูกต้อง คุณพัฒนาเว็บไซต์ได้อย่างไร? คุณทำงานโดยตรงบนไซต์ที่ใช้งานอยู่ หรือคุณมีไซต์เดียวที่ทำงานอยู่ในเครื่อง ดังนั้นคุณจึงสามารถมีเช่น `http://localhost/page1` ในเครื่อง แล้วตามด้วย `http://mysite.com/page1` บนเซิร์ฟเวอร์จริง หรือคุณทำอย่างอื่น?
cn flag
ฉันเดาว่าโลกของฉันแตกต่างออกไปเล็กน้อย ลักษณะของไซต์ที่ฉันสร้างหมายความว่าเนื้อหาทั้งหมดได้รับการจัดการโดยลูกค้า และงานของฉันคือทำให้แน่ใจว่าสถาปัตยกรรม/การปรับใช้รองรับสิ่งที่เกิดขึ้นโดยไม่จำเป็นต้องย้ายเนื้อหาไปมา (การเขียนทับฐานข้อมูลการผลิตเป็นทางเลือกสุดท้าย เพราะไซต์สามารถทำได้ดี กำลังรวบรวมข้อมูลในขณะที่กำลังพัฒนาอยู่) หากมีฟีเจอร์ใหม่ ฟีเจอร์นั้นจะถูกสร้างในโค้ด เนื้อหาทดสอบจะถูกสร้างขึ้นในสภาพแวดล้อมของสเตจ/uat และลงชื่อออก จากนั้นฟีเจอร์จะถูกพุชให้ใช้งานจริง และสร้างเนื้อหาในโลกแห่งความเป็นจริงในผลิตภัณฑ์ สำหรับนักพัฒนาในพื้นที่ ฉันมักจะชอบ Lando มากกว่า
Score:1
ธง de

ใน Drupal 8+ ไม่แนะนำให้ย้ายฐานข้อมูล เนื่องจากจะเขียนทับการเปลี่ยนแปลงใดๆ ที่ทำบนเซิร์ฟเวอร์ที่ใช้งานจริงระหว่างการเขียนทับ มีการสร้าง API การกำหนดค่าขึ้นมาแทน ซึ่งช่วยให้การกำหนดค่าไซต์ - หรือที่เรียกว่าการตั้งค่าที่กำหนดว่าไซต์คืออะไร ทำหน้าที่อะไร และทำงานอย่างไร - เพื่อย้ายข้อมูลระหว่างอินสแตนซ์ต่างๆ โดยไม่ต้องเขียนทับฐานข้อมูล นอกจากนี้ยังมี Migration API แต่จากประสบการณ์ของฉัน การสร้างเนื้อหาใหม่ในการผลิตหลังจากเล่นครั้งแรกใน staging/local มักจะง่ายกว่าการตั้งค่า Migration API

นี่คือบทช่วยสอนที่ฉันเขียนโดยใช้ Configuration API: https://www.morpht.com/blog/drupal-8-configuration-part-1-configuration-api

ถ้าฉันอยู่ในตำแหน่งของคุณ ฉันจะหยุดการเพิ่มฐานข้อมูล และเปลี่ยนไปใช้ Configuration API เพื่อจัดการไซต์ของคุณในสภาพแวดล้อมที่หลากหลายแทน จากนั้นคุณสามารถสร้างบล็อกของคุณในการผลิต และดึงฐานข้อมูลลงมาที่การติดตั้งในเครื่องของคุณเพื่อรับอินสแตนซ์บล็อกนั้นในการติดตั้งในเครื่องของคุณ

หากคุณไม่ต้องการเปลี่ยนไปใช้การกำหนดค่าการย้ายข้อมูลและต้องการเพิ่มฐานข้อมูลของคุณต่อไป วิธีแก้ปัญหาสองข้อที่ฉันเห็นคือ:

  1. ใช้ตัวกรอง PHP ที่คุณกล่าวถึงในโพสต์ของคุณ
  2. สร้างบล็อกที่กำหนดเองผ่านโค้ด แทนที่จะผ่าน UI ของผู้ดูแลระบบ และสร้างลิงก์ของคุณด้วยคลาส URL ตามที่คุณแสดงในส่วนใหญ่

แม้ว่าตัวเลือกแรกจะไม่แนะนำ แต่ก็ไม่ใช่กระบวนการทั้งหมดของการดันฐานข้อมูล ดังนั้นหากคุณกำลังจะดันฐานข้อมูล คุณก็ต้องใช้ตัวกรองอินพุตของ PHP ด้วยเช่นกัน

ng flag
ขอบคุณ @Jaypan ฉันจะได้อ่านสิ่งนั้นฉันไม่มีสิทธิ์เข้าถึงคอนโซลในบัญชี cPanel โฮสติ้งที่ใช้ร่วมกันของลูกค้าส่วนใหญ่ (ฉันทำได้เพียงอัปโหลดไฟล์ ใช้ phpmyadmin และเปลี่ยนการตั้งค่าบางอย่าง) ฉันเดาว่า 'Configuration API' อาจใช้ไม่ได้ที่นี่ใช่ไหม ฉันแค่ออกแบบเว็บไซต์เป็นงานอดิเรกและสร้างไซต์สำหรับองค์กรขนาดเล็ก ดังนั้นการมีไซต์ออฟไลน์ในช่วงเวลาสั้นๆ ในขณะที่ฉันอัปเดตไซต์จึงไม่ใช่ปัญหาจริงๆ
Jaypan avatar
de flag
คุณยังคงใช้ Configuration API ได้

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา