Drupal: 프로필의 제목 태그 재정의

8211 단어 phpdrupal
프로필 모듈은 사용자(예: 직원)에 대한 공개 프로필을 만들려는 경우 Drupal 사이트에서 사용할 수 있는 좋은 도구입니다. 그러나 URL 별칭(/profile/id만 가능) 또는 [Profile Name] #[id]로 표시되는 페이지 제목(예: "직원 프로필 #1". 그다지 도움이 되지 않습니다. 프로필 제목을 재정의해야 하는 두 곳이 있습니다. 페이지의 본문에 표시되는 내용과 브라우저 주소 표시줄에 표시되는 페이지의 제목 태그입니다. 제 경우에는 이름과 성을 대신 표시하고 싶었기 때문에 먼저 프로필에 해당 필드를 표준 텍스트 필드로 생성했습니다.

필드가 있는 상태에서 이 게시물 및 accompanying GitHub code and configuration 은 이러한 문제를 해결한 방법입니다.

URL 별칭



다른 노드와 마찬가지로 the pathauto module을 사용하여 URL을 변경하여 패턴을 기반으로 생성할 수 있습니다. 이것은 pathauto 구성을 변경한다는 점에 유의하십시오. 나처럼 프로필을 추가하기 훨씬 전에 pathauto 구성의 초기 라운드를 수행한 경우 명확하지 않을 수 있습니다.

다음은/admin/config/search/path/settings에서 찾을 수 있는 설정 페이지의 스크린샷입니다.



프로파일 경로 설정 기능이 켜지면 패턴 탭으로 전환하여 패턴을 생성할 수 있습니다. 나는 내 것을 만들었다 /staff/[profile:field_first_name]-[profile:field_last_name] .

페이지 제목



본문에 표시되는 페이지 제목을 보기로 수정했습니다. 또한 기본 제목을 표시하지 않고 이름과 성을 표시하지 않도록 프로필 표시를 변경했습니다.

모든 설정을 분석하지는 않겠지만 보기 구성의 스크린샷은 다음과 같습니다.



GitHub 프로젝트의/sync/config/views.view.profile.yml 파일에 있는 구성 YML 형식에서도 이를 확인할 수 있습니다. 보기가 준비되면 테마의 올바른 위치에 블록을 추가하고 해당 페이지에 대한 표준 페이지 제목 블록을 끕니다(URL 기반).

브라우저 제목



두 번째 모듈은 상대적으로 단순하지만 사용자 지정 모듈이 필요했습니다. 이것이 핵심 부분입니다.

/**
 * Implements hook_preprocess_html
 * 
 * Overrides the "Public Profile #[ID]" title with the first name and last name of the profiled staff member instead
 */
function profile_title_preprocess_html(&$variables) {
  if (stripos($variables['head_title']['title'],"Staff Profile") !== false) {
    //Get the ID from the original title to be replaced
    $profile_id = substr($variables['head_title']['title'],stripos($variables['head_title']['title'],"#") + 1);

    if (isset($profile_id)) {
      //Load the profile
      $profile = \Drupal::entityTypeManager()->getStorage('profile')->load($profile_id);

      if (isset($profile)) {
        $first_name = $profile->get('field_first_name')->getString();
        $last_name = $profile->get('field_last_name')->getString();

        if (isset($first_name) && isset($last_name)) {
          //Change the title to first name and last name
          $variables['head_title']['title'] = "$first_name $last_name";
        }
      }
    }
  }
}


참고: PHP 8 이상에서는 stripos 대신 str_starts_with를 사용했지만 이 용도로도 잘 작동합니다.

제목 재정의와 함께 사용자에게 경고도 제공합니다. 현재 제목이 특정 패턴을 따르는 경우에만 재정의에 의존하기 때문에 프로필의 표시 제목을 변경하면 코드가 더 이상 활성화되지 않는다는 점에서 약간 취약합니다. 그것은 사이트나 그 어떤 것도 손상시키지 않지만 기본적으로 도움이 되지 않는 제목을 표시하는 것으로 돌아갑니다.

여기 그 코드가 있습니다. 프로필 편집 양식에 대한 후크를 실행한 다음 표준 경고를 표시하는 것은 매우 간단합니다.

/**
 * Implements hook_form_FORM_ID_alter
 * 
 * Adds a warning to the admin page for the profile, to advise against changing the title
 */
function profile_title_form_profile_type_edit_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) {
  $message = [
              '#type' => 'container',
              '#markup' => '<p>Warning: Do not change the display label of the staff public profile without altering the corresponding code in the custom module profile_title.</p>
              <p>Failing to do so will result in the title of the profile page reverting back to showing the generic profile name instead of the staff member name.</p>
              ',
            ];
  \Drupal::messenger()->addWarning($message);
}

좋은 웹페이지 즐겨찾기