Drupal 7での「page.tpl.php」などのテンプレート内で、ユーザーの権限(ロール)によって処理を変えたい場合に、判定するためのコードのメモです。
|
<?php global $user; if (in_array('administrator', $user->roles)) { //administrator権限ユーザーの場合の処理 } ?> |
また、複数の権限を判定したい場合には、下記の様にも書けます。
|
<?php global $user; if (checkValuesInArray(array('administrator', 'manager'), $user->roles)) { //administrator、またはmanager権限ユーザーの場合の処理 } function checkValuesInArray($search, $target) { $sign = false; foreach ($search as $value) { if (in_array($value, $target)) $sign = true; } return $sign; } ?> |
ブラウザからPDFを開く際に、URLにパラメータ付加して渡すことで、PDFの表示方法を変更することができます。
指定ページを開くにはURLの最後に「#page=5」のように、ページ数を付加します。
|
http://example.com/sample.pdf#page=5 |
ウィンドウサイズに合わせて全面表示には「#view=fit」を付加します。
|
http://example.com/sample.pdf#view=fit |
またパラメータは「&」で区切ることにより、複数同時に渡すことができます。
|
http://example.com/sample.pdf#page=5&zoom=100 |
その他のパラメータは下記で確認ができます。
PDF Open Parameters
Firefox上でjQueryで記述した処理が、実行されない場合の対処法です。
jQueryの「.ready()」ステートメントで書き始める処理が、Firefoxの場合に限り動作しないケースがたまにあります。
原因ははっきりとは分かりませんが、特にDrupal上で記述すると、よくこの症状に遭遇します。
なので暫定的な対処法として、次のように書くようにしています。
|
$(document).ready(function() { $(window).bind("load", function() { //ここに処理を書きます }); }); |
「.bind()」を入れ子にして、ウィンドウの要素を全て読み込んだ段階で処理を実行するようにします。
Firefoxの場合だけ起こるというのが、やや不可解ではありますけど。
jQueryを使って、ウィンドウサイズに合わせて画像を拡大縮小し、全面に表示する方法です。
画像の縦横比率は保ったままに、ウィンドウの全面を覆うように拡大縮小を行っています。ウィンドウのリサイズの際には、画像もアニメーションでリサイズします。
サンプルはこちら
HTMLファイル内では、画像全面表示のための関数の実行と、ウィンドウリサイズ時の処理を記述しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
|
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Adjust Image</title> <link rel="stylesheet" type="text/css" href="common/css/reset.css" media="all" /> <link rel="stylesheet" type="text/css" href="common/css/style.css" media="all" /> <script type="text/javascript" src="common/js/jquery-1.7.2.min.js"></script> <script type="text/javascript" src="common/js/jquery.easing-1.3.min.js"></script> <script type="text/javascript" src="common/js/functions.js"></script> <script type="text/javascript"> $(function() { var time = 1000; var time_resize = null; var image = $("div#image"); $(window).bind("load", function() { adjustImage(image, 0); $(window).resize(function() { if (time_resize) { clearTimeout(time_resize); } time_resize = setTimeout(function() {adjustImage(image, time)}, 100); }); }); }); </script> </head> <body> <div id="image"> <div class="inner"> <img src="images/image.jpg" alt="" /> </div><!-- inner --> </div><!-- image --> </body> </html> |
外部JavaScriptファイル「functions.js」に、画像全面表示のための関数を記述しています。
ウィンドウを覆い尽くすように画像サイズを拡大縮小して、センター表示にしています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
function adjustImage(image, time) { var image_width = image.find("img").width(); var image_height = image.find("img").height(); var width = 0; var height = 0; var margin_left = 0; var margin_top = 0; var ratio_outer = $(window).width()/$(window).height(); var ratio_inner = image_width/image_height; if (ratio_outer > ratio_inner) { width = $(window).width(); height = width/ratio_inner; } else { height = $(window).height(); width = height*ratio_inner; } margin_left = Math.floor(($(window).width()-width)/2); margin_top = Math.floor(($(window).height()-height)/2); image.find("img").animate({width:width, height:height}, {duration:time, easing:"easeOutQuart"}); image.animate({top:margin_top, left:margin_left}, {duration:time, easing:"easeOutQuart"}); } |
画像表示のためのCSSの箇所は次のようになっています。
|
div#image { position: fixed; overflow: hidden; } div#image div.inner { position: relative; } |
Drupalではコンテンツの表示には「$content」という変数を使います。
これは「node.tpl.php」テンプレート内で使うことができますが、汎用的なテーマのテンプレートの場合、次のように記述して、コンテンツに含まれるフィールドをまとめて出力しています。
|
<?php print render($content); ?> |
フィールドの表示順やラベル表示の有無は「サイト構築 > コンテンツタイプ」内の「表示の管理」から変更をすることもできます。
もしオリジナルテーマを作成して、レイアウト内で個別にフィールドを出力したい場合には次のように個別指定も可能です。
|
<?php print render($content['field_image']); ?> |
上記では「field_image」フィールドのみを出力しています。
画像などでは、一つのフィールドに複数点アップするケースもありますが、その内の一つ目の項目のみを出力したい場合は次のようにします。
|
<?php print render($content['field_image'][0]); ?> |