こんにちわ。
現在Drupal7でログインフォームのカスタマイズを行っているのですが、思うようにうまくいかないため、アドバイス頂けると助かります。
以下のサイトを参考にして、template.php内におそらくデフォルトのログインフォームを上書きする?ようなコードを追記し、さらにカスタマイズされたログインフォーム用のPHPファイル(user-login.tpl.php)をtemplatesフォルダを作成しその中に格納しましたがうまく反映されません。
参考サイト
gregsomers.com/blog/2013/05/29/drupal-7-e-commerce-style-custom-login-page現在利用しているテーマはbootstrap3です。
こちらのページやDrupalの公式ページを見る限りだと、テーマフォルダが格納されているディレクトリは/site/all/themes以下と記載されていますが、
私の環境はマルチドメインで運用しているためsites/ドメイン名/themes/bootstrap/にテーマが格納されていることが記載内容と異なります。
※こちらが原因してるかもしれませんが。。。
template.phpへ追記
function MYTHEME_theme() {
$items = array();
$items['user_login'] = array(
'render element' => 'form',
'path' => drupal_get_path('theme', 'MYTHEME') . '/templates',
//define the file name
'template' => 'user-login',
'preprocess functions' => array(
'MYTHEME_preprocess_user_login'
),
);
return $items;
}functionの後のMYTHEMEという部分は利用しているテーマ名におきかえてくれと記載があったため、bootstrapという現在利用しているテーマ名に置き換えています。
しかし、ここで1つ問題が、、
function bootstrap_theme() { とすると、既に同じ関数?が上の方で定義されており、PHPでエラーがでてしまいます。
そこで、既にある関数の中に以下のように追記してみたところ、エラーは無くなりましたがログインページがカスタマイズされずデフォルトのフォームが出力される状況です。
Comments
続きです そこで、以下の通り書き換えてみたところエラーはな
続きです
そこで、以下の通り書き換えてみたところエラーはなくなりました。
function bootstrap_theme(&$existing, $type, $theme, $path) {bootstrap_include
($theme, 'theme/registry.inc');
return _bootstrap_theme($existing, $type, $theme, $path);
$items = array();
$items['user_login'] = array(
'render element' => 'form',
'path' => drupal_get_path('theme', 'bootstrap') . '/templates',
'template' => 'user-login',
'preprocess functions' => array(
'bootstrap_preprocess_user_login'
),
);
return $items;
}
}
しかし、未だにカスタムログインフォームが適用されないため、これは予想ですが、テーマフォルダのパスが異なるため、以下のコードの部分がなにか違う気がするのですがdrupal_get_pathというのはallに入ってるTheme以外でもパスをださないのでしょうか。。
'path' => drupal_get_path('theme', 'bootstrap') . '/templates',どなたかアドバイス頂けると助かります。
コードが
return _bootstrap_theme($existing, $type, $theme, $path);の行以下のコードが実行されてないのでは?
Drupal カスタマイズTips 更新中...
CMS自由自在!
http://customfield.jp/
https://www.drupal.org/projec
https://www.drupal.org/project/bootstrap を使われているのであれば、テーマを直接変更するのではなく、bootstrap_subtheme を変更して使います。後にアップデートを当てられなくなるので、もし既に変更を施してしまった場合にはテーマ自体を削除・再インストールして始めるほうが良いです。
英語ですが、以下のドキュメンテーションに Bootstrap のサブテーマの変更に関する説明があります。
https://www.drupal.org/node/1978010
shigehiro
shigehiro さん
確かにこちらのコードが実行されていなく、うまくテンプレート内のファイルが読み込まれていないようにもみえるのですが、何故読み込まれてないのかがわからず、、
dokumori さん
サブテーマに関してアドバイスありがとうございます。早速サブテーマをコピーして適用してみましたが、やはりログインフォームのカスタムが出来ず。。。
shigehiro さんが仰るとおりどこか記述方法がまちがっているのかもしれません、
ちなみに現在はサブテーマにしているため、コードは以下のように記載しなおしています。
<?php
/**
* @file
* template.php
*/
function test_theme_theme() {
$items = array();
$items['user_login'] = array(
'render element' => 'form',
'path' => drupal_get_path('theme', 'test_theme') . '/templates',
//define the file name
'template' => 'user-login',
'preprocess functions' => array(
'test_theme_preprocess_user_login'
),
);
return $items;
}
参照先のサンプルコードの仕組み自体は正しく見えますし、ロー
参照先のサンプルコードの仕組み自体は正しく見えますし、ローカルで試しても実際に問題なく動きました。なので、redboxhosting 側のテーマのどこかに問題があるように感じます。
テンプレートファイルですが、以下のディレクトリに、以下のファイル名で格納されていますか?
sites/ドメイン名/themes/bootstrap/test_theme/templates/user-login.tpl.phpまた、サブテーマを使うためには、ファイル名等の変更を適宜行う必要がありますが、これは正しく出来ていますか?
dokumoriさん ご確認ありがとうございます。 ファイ
dokumoriさん
ご確認ありがとうございます。
ファイル名はご連絡頂いた通りのパスと名前で格納されているためこちらは問題無いかと思われます。
また、サブテーマを有効にした手順としては、以下の通りですが、サブテーマを有効にしてログインフォームを上書きする場合、このほかに何か名称を変更しなければいけないのでしょうか?
1:bootstrapテーマディレクトリ内にあるbootstrap_subthemeフォルダの名前をtest_themeにリネームコピーしました。
sites/ドメイン名/themes/bootstrap/test_theme
2; sites/ドメイン名/themes/bootstrap/test_theme/bootstrap_subtheme.infoというファイル内の上の方のみ以下のように書き換えました。※infoファイル自体のファイル名は変更していません。
name = test_theme
description = A Bootstrap Sub-theme.
core = 7.x
base theme = bootstrap
3;Drupal側でtest_themeを有効にして現状はbootstrapテーマとして普通に表示されております。
よろしくお願い致します。
dokumoriさん
dokumoriさん 皆さん
サブテーマに関して色々調べた所、どうやらinfoファイルをリネームしていなかったことが原因で、サブテーマが有効になっていなかったようです。
infoファイルを以下の通りサブテーマのディレクトリと同じ名前にリネームする事によってしっかり親テーマを継承しつつ、テンプレートで作成した部分が上書きされ表示されるようになりました。
変更前
bootstrap_subtheme.info
変更後
test_theme.info
Drupalのテーマ画面ではinfoファイルの名前が一致していなくても有効にできており、さらにアイコンなども管理画面から変更出来ていたため、てっきりサブテーマが有効なものだとおもっていました。