2017-02-22 5 views
0

Drupal 8.2.6을 사용 중이고 사용자 정의 컨텐츠 유형 페이지에 표시 될 블록을 작성하려고합니다.Drupal 8 - 사용자 정의 모듈 내에서 노드 필드 값 읽기

사이트 관리자에게 제품을 예약하려는 전자 메일 (사용자 지정 콘텐츠 형식)을 보내는 예약 블록의 일종입니다.

제출 버튼과 양식을 렌더링하는 블록으로 구성된 양식이 필요하다고 가정합니다.

그러나 실제 포인트는 제품의 참조가 포함 된 메일을 사이트 관리자에게 보낼 것입니다. 내가 here을 발견

, 나는이 조각을 사용하여 원하는 값을 얻을 수 :

if ($node = \Drupal::routeMatch()->getParameter('node')) { 
    $field_my_custom_value = $node->field_my_custom_value->value; 
} 

하지만 내가 그것을 사용해야 내 코드의 어느 범위에 확실하지 않다. 이 예제는 내 경우에 값이있는 메일을 보내는 맞춤 블록 내에서 값을 렌더링하는 데 사용되었습니다.

그리고 Drupal 8의 맞춤 모듈에서 메일을 보내는 방법을 누군가에게 상기 시켜줄 수 있습니까? 나는 이전 버전에 내 질문을 다시 되돌릴려고하고 같은 경우 사람이 그것을 필요에

고마워요 그래서

답변

0

는, 문서의 하루의 전체 가치 후 자신을 해결 한 후, 여기에, 솔루션입니다.

그래서, 위의 문제의 조각 주어, 나는 buildForm() 기능

public function buildForm(array $form, FormStateInterface $form_state) { 
    $field_value = ''; 
    if ($node = \Drupal::routeMatch()->getParameter('node')) { 
    $field_value = $node->field_name->value; 
    } 

    $form['field_value'] = array(
    '#type' => 'value', 
    '#value' => $field_value, 
); 
    // And then you add the definition for other form items and submit button 
} 

에서 그리고 값을 사용하여 메일을 보내기위한 변수 선언

,이 같은 $form_state를 사용하여 값 검색 :

public function submitForm(array &$form, FormStateInterface $form_state) { 
    $module = 'your_module_name'; 
    $key = 'any_key_you_would_like'; 
    $to = '[email protected]'; 
    $langcode = 'en'; 
    $params = array(
    'body' => 'Node is booked', 
    'subject' => $form_state->getValue('field_value'), 
); 

    $mailer = \Drupal::service('plugin.manager.mail'); 
    $mailer->mail($module, $key, $to, $langcode, $params, NULL, TRUE); 
} 

$node->field_name->value 대신 $node->getTitle()을 사용하는 노드 제목과 같이 일부 값은 노드에서 얻는 것이 매우 까다 롭습니다. 따라서 Drupal 8의 Devel + Kint를 사용하여 필드를 확인하고 싶습니다 모듈을 사용하여 사용할 속성과 메소드를 알 수 있습니다.

+0

좋아요! 바로이 게시물의 왼쪽에있는 투표 모듈 아래의 체크를 클릭하여 솔루션을 질문에 대한 답으로 표시 할 수 있습니다. – nyedidikeke

관련 문제