Drupal

คำถาม & คำตอบสำหรับนักพัฒนาและผู้ดูแลระบบ Drupal

4
รับค่าของฟิลด์ผู้ใช้ที่กำหนดเอง
ฉันมีรูปแบบกำหนดเองที่ต้องการแสดงค่าเริ่มต้นจากเขตข้อมูลผู้ใช้ที่กำหนดเอง ฟิลด์ถูกสร้างภายใต้ / admin / config / people / accounts / field และชื่อเครื่องคือ field_r_period_length_sec //get user $userCurrent = \Drupal::currentUser(); $uid = $userCurrent->id(); $r_period = $userCurrent->field_r_period_length_sec; อย่างไรก็ตามค่าไม่แสดงขึ้นและฉันได้รับข้อผิดพลาดนี้: ประกาศ: คุณสมบัติที่ไม่ได้กำหนด: Drupal \ Core \ Session \ AccountProxy :: $ field_r_period_length_sec ผมทำอะไรผิดหรือเปล่า?
13 users  8 

1
clean_class และ clean_id ทำงานอย่างไร
ฉันใหม่สำหรับไวยากรณ์ Drupal 8 และ Twig ฉันไม่สามารถเข้าใจตัวกรอง clean_class "region | clean_class" ได้อย่างไร clean_class คืออะไรที่นี่? ฉันได้เพิ่มรหัสต่อไปนี้ในไฟล์ page.html.twig ของฉัน {% set classes = [ 'region', 'region-' ~ region|clean_class, ] %} {{ dump(classes) }} ผลการพิมพ์มัน: array (size=2) 0 => string 'region' (length=6) 1 => string 'region-' (length=7)
13 8  theming 

6
วิธีสร้างเขตข้อมูลแบบอ่านอย่างเดียวโดยใช้ hook_form_alter
ฉันกำลังพยายามทำให้ฟิลด์ของฟอร์มโปรไฟล์ Drupal เป็นแบบอ่านอย่างเดียวในโหมดแก้ไข ฉันใช้รหัสต่อไปนี้ใน hook_alter $form[field_organisation_company_name][und][0]['#after_build'][]='_build_element_readonly'; function _build_element_readonly($element, &$form_state) { $element['value']['#attributes']['readonly'] = 'readonly'; return $element; } ใน UI ที่ยื่นแสดงเป็นแบบอ่านอย่างเดียว แต่ยังฉันสามารถเปลี่ยนค่าโดยใช้ firebug และบันทึก มีวิธีป้องกันพฤติกรรมนี้หรือไม่?
12 7  forms 

2
เป็น $ node เสมอใน page.tpl.php
ฉันได้รับข้อผิดพลาดเกี่ยวกับ $ node เป็นระยะ ๆ โดยที่ไม่ได้กำหนดไว้ในไฟล์เทมเพลตของฉันฉันมีเงื่อนไขง่ายๆที่ตรวจสอบว่ามีการแสดงประเภทโหนดหรือไม่ ฉันคิดว่า $ node ใช้ได้เสมอหรือฉันผิด
12 7  theming 

3
จะโหลดเอนทิตีย่อหน้าบนวัตถุโหนดได้อย่างไร
ฉันใช้ย่อหน้าในประเภทเนื้อหาของฉัน ฉันสร้างประเภทย่อหน้าและเพิ่มเนื้อหาแล้ว foreachตอนนี้ผมต้องการที่จะโหลดย่อหน้าในส่วน แต่ไม่มีอะไรปรากฏขึ้น $parasมันว่างเปล่า: $node = \Drupal\node\Entity\Node::load(1); $paras = $node->get('field_paragraph')->referencedEntities();
12 8  paragraphs 

3
จะรับค่าฟิลด์ย่อหน้าได้อย่างไร
ฉันต้องการสร้างรายการผลิตภัณฑ์ใน drupal และส่งไปที่เว็บเซอร์ สำหรับสิ่งนี้ฉันสร้างประเภทเอนทิตีพร้อมย่อหน้าสำหรับแต่ละผลิตภัณฑ์ ฉันจะโหลดย่อหน้าและเข้าถึงฟิลด์ได้อย่างไร จนถึงตอนนี้ฉันเห็นเฉพาะ target_id และ target_revision_id ของผลิตภัณฑ์ ขอบคุณ! $nodestorage = \Drupal::entityManager()->getStorage('node'); $productslist = $nodestorage->loadUnchanged(9)->toArray(); foreach($productslist['field_products'] as $prod) { debug($prod); } ผลลัพธ์: Array ( [target_id] => 1 [target_revision_id] => 3 )

2
วิธีสร้างฟอร์มใหม่หลังจากการโทร AJAX
ฉันกำลังพยายามอนุญาตให้ผู้ใช้เลือกฟิลด์จำนวนมากแบบไดนามิกโดยใช้กล่องดร็อปดาวน์โดยใช้การโทร ajax แต่ดูเหมือนว่าฉันจะไม่ได้รับการโทร ajax เพื่อสร้างฟอร์มใหม่ในภายหลัง <?php class AJAXexample extends BlockBase { public function blockForm($form, FormStateInterface $form_state) { if (empty($form_state->getValue('number'))) { $form_state->setValue('number', 3); } $form['columnNum'] = [ '#title' => t('Number of Columns'), '#type' => 'select', '#options' => [ 1 => '1', 2 => '2', 3 => '3', 4 => '4', ], …
12 forms  8  ajax 

4
การจัดเก็บข้อมูล / เซสชันสำหรับผู้ใช้ที่ไม่ระบุชื่อ
ฉันกำลังทำงานในร้านค้าและสำหรับรถเข็นฉันต้องเก็บรายการก่อนชำระเงิน $tempstore = \Drupal::service('user.private_tempstore')->get('boutique'); $tempstore->set('poids', $form_state->getValue('poids')); ฉันจะดูที่บริการผู้ใช้สำหรับ: pivate_tempstore และ shared_tempstore แต่นั่นใช้งานได้สำหรับผู้ใช้ที่ได้รับสิทธิ์ ฉันจะใช้อะไรกับข้อมูลร้านค้าได้บ้าง $ _SESSION หรือ Drupal 8 มีบริการสำหรับสิ่งนั้น?
12 8  sessions  files 

4
วิธีลบประเภทเนื้อหาโดยทางโปรแกรม
ฉันสร้างชนิดเนื้อหาโดยทางโปรแกรมในระหว่างการติดตั้งโมดูล (โดยใช้การกำหนดค่าที่เก็บข้อมูล) ฉันต้องการลบประเภทเนื้อหานั้นขณะถอนการติดตั้งโมดูล มีวิธีใดในการทำเช่นนี้กับ Drupal 8
12 nodes  8 

3
ทำไมเว็บไซต์ drupal.org จึงไม่ใช้ Drupal รุ่นที่ใหม่กว่า?
ดูเหมือนว่าถ้า drupal.org สนับสนุนให้ผู้คนใช้ Drupal 8 พวกเขาควรเป็นผู้นำโดยยกตัวอย่างและย้ายเว็บไซต์ของตนเองไปที่ Drupal 8 บน drupal.org: <meta name="Generator" content="Drupal 7 (http://drupal.org)"> มีเหตุผลทำไมพวกเขาปล่อยDrupal รุ่น 8แต่พวกเขายังคงใช้Drupal เวอร์ชัน 7 อยู่หรือไม่ ความจริงที่ว่าพวกเขายังไม่ได้ย้ายถิ่นให้เหตุผลที่น่าสงสัยแก่เราว่าทำไมเราถึงยังไม่ควร?

4
กำลังมองหาตัวอย่างการแทรกฐานข้อมูล
ตามdb_insertหน้าคู่มือฟังก์ชั่นนี้เลิกใช้และเป็นการดีกว่าที่จะใช้การเชื่อมต่อฐานข้อมูล Drupal 8 เพื่อทำการแทรก เลิก ตั้งแต่ Drupal 8.0.x จะถูกลบใน Drupal 9.0.0 รับการเชื่อมต่อฐานข้อมูลเข้าสู่บริการของคุณแทนจากคอนเทนเนอร์และ call insert () ตัวอย่างเช่น $ injected_database-> insert ($ table, $ options); ตอนนี้ฉันจะได้รับการเชื่อมต่อฐานข้อมูลและinsert()วิธีการโทรได้อย่างไร
12 database  8 

4
การรัน Drush ส่งคืนข้อผิดพลาด
ฉันกำลังใช้ Drush เวอร์ชัน 6.2.0 และ Drupal 8 beta รุ่นล่าสุดบน Dreamhosters เมื่อฉันเรียกใช้drush cc allภายในไดเรกทอรีไซต์ฉันได้รับข้อผิดพลาดต่อไปนี้ทันทีหลังจากดำเนินการคำสั่ง: ข้อผิดพลาดร้ายแรง: ไม่พบคลาส 'Drupal \ Core \ Session \ AccountInterface ใน /home/mywebsite/mywebsite.com/core/includes/bootstrap.inc ที่บรรทัด 63 คำสั่ง Drush ถูกยกเลิกอย่างผิดปกติเนื่องจากข้อผิดพลาดที่ไม่สามารถกู้คืนได้ ข้อผิดพลาด: ไม่พบคลาส 'Drupal \ Core \ Session \ AccountInterface ใน /home/mywebsite/mywebsite.com/core/includes/bootstrap.inc บรรทัด 63 ทำไมมันเกิดขึ้น ฉันจะแก้ไขสิ่งนี้ได้อย่างไร
12 drush  8 

8
แก้ไขฟอร์มที่มีอยู่
เราเพิ่งเริ่มต้นด้วย Drupal 8 และเร็วมากที่เราพบปัญหาแรกของเรา ฉันจะเปลี่ยนรูปแบบที่มีอยู่ใน Drupal 8 ได้อย่างไร เราจำเป็นต้องเปลี่ยนวิธีการบันทึกสำหรับรูปแบบโหนดเพื่อทำการเปลี่ยนเส้นทางไปยังหน้าอื่น เราต้องการเปลี่ยนรูปแบบโหนดให้เป็นแบบฟอร์มหลายขั้นตอน หลังจากผู้ใช้สร้างเนื้อหาใหม่พวกเขาจะถูกเปลี่ยนเส้นทางไปยังแบบฟอร์มใหม่ (เราสร้าง) เพื่อรับข้อมูลเพิ่มเติม hook_entity_type_alter()เราแก้ปัญหาของเราดำเนินการ function mymodule_entity_type_alter(&$entity_info) { $handlers = $entity_info['node']->get('handlers'); $handlers['form']['default'] = 'Drupal\mymodule\Form\MyExtendedNodeForm'; $handlers['form']['edit'] = 'Drupal\mymodule\Form\MyExtendedNodeForm'; $entity_info['node']->set('handlers', $handlers); } จากนั้นเราสร้างคลาสฟอร์มใหม่ที่ขยายฟอร์มโหนดและเปลี่ยนวิธีการบันทึก class MyExtendedNodeForm extends NodeForm { public function save(array $form, FormStateInterface $form_state) { parent::save($form, $form_state); $node = $this->entity; $form_state->setRedirect('entity.regions.add_form', ['nid' => …
12 8  forms 

1
รับแบบฟอร์มโดยทางโปรแกรมใน Drupal 8
เอกสารฯ : อาร์กิวเมนต์ที่ส่งผ่านไปยังเมธอด getForm () เป็นชื่อของคลาสที่กำหนดแบบฟอร์มของคุณและเป็นการใช้งาน \ Drupal \ Core \ Form \ FormBuilderInterface ฉันจะหาชื่อของชั้นที่กำหนดในแบบฟอร์มความคิดเห็นเว็บไซต์ให้บริการโดยหลักติดต่อโมดูล (ID รูปแบบคือ: feedback_contact_message_form) เมื่อฉันdpm()แบบฟอร์มฉันจะเห็นว่ามีคลาสที่กำหนดไว้: $input array(30) →'#attributes' => array(1) →'class' => array(3) string(29) "feedback-contact-message-form" string(20) "contact-message-form" string(12) "contact-form" ฉันลองรูปแบบต่าง ๆ ของสิ่งนี้เป็นพารามิเตอร์เพื่อส่งไปที่: \Drupal::formBuilder()->getForm(); แต่ไม่มีโชค ขอบคุณ
12 8 

2
วิธีเข้าถึงค่าจากขั้นตอนก่อนหน้าใน Webform หลายหน้า
ฉันใช้ Webform 4 มันใช้โทเค็นของ Drupal ไม่ใช่ของตัวเอง% โทเค็นเหมือนที่เคยเป็นในเวอร์ชัน 3 และทุกสิ่งที่ฉันพบก็เกี่ยวกับเว็บฟอร์ม 3 สมมติว่าฉันต้องการสร้างแบบฟอร์มสมัครสมาชิกหลายหน้า ในหน้าแรกจะมีเพียงฟิลด์อีเมล ในวินาทีที่ฉันต้องการมาร์กอัปที่จะพูดบางสิ่งเช่น: การกำหนดค่าการสมัครรับข้อมูลโดยละเอียดสำหรับ molot@example.com ในทำนองเดียวกันฉันต้องการที่จะใช้เป็นค่าเริ่มต้นสำหรับฟิลด์ในอนาคตเช่นขอให้ผู้ใช้ที่อยู่สำหรับการเรียกเก็บเงินและที่อยู่จัดส่ง มีโทเค็นสำหรับสิ่งนั้นหรือไม่? สิ่งที่ฉันทำตอนนี้คือ: function mymodule_token_info() { $type = array( 'name' => t('Webform submitted values'), 'description' => t('Tokens related to $_POST[\'submitted\'].'), ); $tokens = array(); if(isset($_POST['submitted'])) { foreach($_POST['submitted'] as $key => $val) { //discard $val now …
12 webforms  tokens 

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.