私はDrupalテーマにかなり慣れており、Drupal 8のフラグモジュールがフラグ/フラグ解除リンク用に生成するHTML出力をカスタマイズしようとしています。詳細具体的には、リンクをBootstrapクラスを使用してボタンとして表示するようにしたいと思います。これを行うための良い方法を誰かが知っていますか?ユーザーを有効にするためにユーザープロファイルページにフラグリンクを配置します他のユーザーをフォローするには、これまで私が試したいくつかのアプローチを以下に示します。
Twig replace
フィルターを使用して出力を変更します。これは機能しません。「レイジービルダー」が使用されており、実際のHTML出力の生成を後で延期するためです) Twigのレンダリングが既に完了した後の段階。
カスタマイズされたバージョンでflag.tpl.php
テンプレートをオーバーライドします。これは効果がありません。 Drupal 8(PHPテンプレート全般)を廃止した)では、この機能はもうアクティブではありませんか?
テーマの前処理関数でのflag_create_link
の使用。この関数が存在しないというエラーが発生しました。 Drupal 8バージョンのモジュールにはもう存在しませんか?(または必要なインポートが欠落している可能性があります)。
これはD7で機能しますが、D8に転送されると確信しています。
1つのアプローチはビューを使用することです
[詳細設定]で、RELANTIONSHIPはフラグリンクフィールドにアクセスするためにフラグの関係を追加します。
FIELDSでflag link fieldを追加し、Style Settings >> Checkmark Customize field HTML >> Select DIV >> type your bootstrapクラス名。
あなたのテーマのcssファイルにこれを追加してください、例:
.ddd .flag-action { border: solid green; }
.ddd .flag.unflag-action { border: solid red; }
これは私のために働いてしまったソリューションです。私のMYTHEME.themeファイルには、次のように記述します。
function MYTHEME_preprocess_user(&$vars){
$f = \Drupal::service('flag.link_builder');
$link = $f->build('user',$vars['user']->id(),'followed');
$link['link']['#attributes']['class'][]="btn";
$vars['follow_link'] = $link;
}
次に、user.html.twig
テンプレート、私は{{ follow_link }}
を適切な場所に。ただし、AJAXリンク(この場合、ボタンをクリックするとボタンのスタイルが失われる)と互換性がないため、完全なソリューションではありません)が、通常のリンクでは機能します。
私が発見できたことから、フラグリンクは link render elements であり、これは hook_link_alter()
によって変更できます。
次のコードは実際にはテストされていません(そして 将来的に壊れる可能性があります )
function MYMODULE_link_alter(&$variables) {
if (strpos($variables['options']['attributes']['id'], 'flag-') === 0) {
$variables['options']['attributes']['class'] += [
'new-class',
];
}
}
より良いアプローチが可能であることを願っていますが、alterフックに依存するのではなく、flag.link_builder
サービスをスワップアウトして目的のクラスを適用するしか方法がありませんでした。