Help us understand the problem. What is going on with this article?

concrete5 テーマスニペット集 完全保存版【5.6.x 未満】

More than 3 years have passed since last update.

テーマを作る上で、良く使うスニペット集を殴り書きです。PHPの開始&閉じタグを省いているので、適宜、<?php ?> の追加をお願いします。このコードは 5.6.3.1.ja で確認済み。h() など 5.6.2.1以降でないと使えない関数も使っています。

説明は時間があるときに別記事で行っていきます。 Katz がテーマ作成の時によく使うコードのたまり場です。

5.7.x以降対応版

concrete5.7.x 以降は、フレームワークが変更され、テーマの記述方法も若干変わっています。そのため、新しいスニペット記事を用意しました。こちらからご覧ください。
http://ja.katzueno.com/2015/08/3492/

お断り

この記事は、下記ブログからの転載です。

原文
http://ja.katzueno.com/2014/05/3104/

※ 殴り書きなので、もしかしたら間違っているコードあるかも。その場合はお知らせいただくと幸いです。
更新日: 2014/6/20 (金)
※ このページは随時更新していきますが、ブログ記事のほうが更新頻度は高いです。

コードスニペット集

PHP コードスニペット

// 必須タグ

// 最初の直接アクセス禁止
defined('C5_EXECUTE') or die(_("Access Denied."));


// <head> 直後に配置
Loader::element('header_required');


// </body> 直前に配置
Loader::element('footer_required');


//エリア宣言
$a = new Area('【エリア名】');
$a->display($c);


//グローバルエリア宣言
$a = new GlobalArea('【グローバルエリア名】');
$a->display();


// view.php (Single ページ) 表示用
print $innerContent;


// 便利なコード集

// 現在のページ情報を格納する。ファイルの最初に宣言しておいた方がいい(下記のコードもこれを使っている所あり)
$c = Page::getCurrentPage();


// テーマへのパス
echo $this->getThemePath();


// テーマのカスタマイズ機能を使って CSS をセットする場合
echo $this->getStyleSheet('【CSSファイル名】.css');


// ヘッダーやフッター部分のコードなど、別ファイルに共有部分を追加し埋め込みたい場合
$this->inc('elements/header.php');
$this->inc('elements/footer.php');
$this->inc('【その他任意のファイル名】');


// エリア内のブロック数を制限する
<?php
$a = new Area('【エリア名】');
$a->setBlockLimit(1); // 1 のところを変えて制限数を変える
$a->display($c);
?>

//エリアがゼロだったら表示しない(Global にしたらグローバルエリアでも可能)
$a = new Area('【エリア名】');
if ($c->isEditMode() | $a->getTotalBlocksInArea($c) > 0) {
 $a->display($c);
}

$a = new GlobalArea('【グローバルエリア名】'); // 未検証・要テスト
if ($c->isEditMode() | $a->getTotalBlocksInArea() > 0) {
 $a->display();
}

// 編集モードだった場合の条件分岐
if ($c->isEditMode()) {
// ここにコードや、HTML を書く。
}

// 編集ツールバーが見えたときの条件分岐 (5.6.x 以降)
global $cp;
$canViewToolbar = (isset($cp) && is_object($cp) && $cp->canViewToolbar());
if ($canViewToolbar) {
// ここにコードや、HTML を書く。
}

// 編集ツールバーが見えたときの条件分岐 (5.6.x 未満)
global $cp;
$canViewToolbar = (isset($cp) && ($cp->canWrite() || $cp->canAddSubContent() || $cp->canAdminPage() || $cp->canApproveCollection()));
if ($canViewToolbar) {
    //do something...
}

// ログイン・ログアウトURL (ログイン後に元いたページに戻ります)
$u = new User(); // これはファイルの最初に一回宣言したら良いだけです
if ($u->isRegistered()) { ?>
<p class="login_button inner-cell"><a href="<?php echo $this->url('/login', 'logout')?>"><?php echo t('Logout');?></a></p>
<?php } else { ?>
<p class="login_button inner-cell"><a href="<?php echo $this->url('/login', 'forward') . $c->getCollectionID() . '/';?>"><?php echo t('Login');?></a></p>

<?php } ?>



<?php
// ページ情報の取得


// ページ名を取得し htmlentitle エンコード
echo h($c->getCollectionName());


// ページ名・親階層のページを表示
$c = Page::getCurrentPage();
$nh = Loader::helper('navigation');
// concrete5 第4階層以降であれば、第3階層 のページタイトルを表示させる。
// [現在のページタイトル] - [第2階層のページタイトル]
// ページ属性 display_secondary_title がチェックされていれば第2階層のタイトルを表示しない
// $trail [0] はトップ
// $trail [1] は第2階層
echo h($c->getCollectionName());
if (!$c->getAttribute('display_secondary_title')){  
    $trail = $nh->getTrailToCollection($c))             
    $breadcrumb = array_reverse ($trail);
    if ($$breadcrumb[1) { 
        echo . ' - ' .h($breadcrumb[1]->getCollectionName());
    }
}



// ページの「説明」を取得
echo h($c->getCollectionDescription());


// ページの公開日 (Y/m/d) という日付フォーマットで表示
echo $c->getCollectionDatePublic('Y/m/d');


// ページの所有者を表示
$user = User::getByUserID($c->getCollectionUserID());
$username = $user->getUserName();
echo $username;


// ページの所有者の公開プロフィールURLを取得
$profileurl = View::url('/profile/',$c->getCollectionUserID());
echo $profileurl;


// ページを最初に作った人のIDを取得
$original_author = Page::getByID($c->getCollectionID(), 1)->getVersionObject()->getVersionAuthorUserName();
echo $original_author;


// 最後に編集した人のユーザーIDを取得
$last_edited_by = $c->getVersionObject()->getVersionAuthorUserName();
echo $last_edited_by;



// ページ属性の値を出力
echo $c->getAttribute('【ページ属性のハンドル】');


// ページ属性の値を出力(エスケープ処理)
echo h($c->getAttribute('【ページ属性のハンドル】'));


// ページ属性の値を出力(複数行に <br> つける)
echo nl2br(h($c->getAttribute('【ページ属性のハンドル】'));



// 日付属性を表示させる(いろんなバージョン)をちょっとすっきり
$date = strtotime($c->getAttribute('【ページ属性のハンドル】'));
echo date ('Y年m月d日 H:i', $date));
echo date ('Y/m/d', $date));
echo date ('H:i', $date));



// ページ属性で画像を読み込む(リサイズなし)
$img = $c->getAttribute('【画像が入っているページ属性のハンドル】');
list($img_width, $img_height) = getimagesize($img->getPath()); //元画像の縦、横ピクセルを取得
echo $img->getRelativePath(); // 画像URL
echo $img_width; // 横ピクセル数
echo $img_height; // 縦ピクセル数
// 上記3コードを適宜 <img> タグの中に埋め込む



// ページ属性で画像を読み込む(リサイズあり)
$ih = Loader::helper('image'); // イメージヘルパー読み込み。リサイズ処理で必要
$img = $c->getAttribute('【画像が入っているページ属性のハンドル】');
$thumb = $ih->getThumbnail($img, , , true); //リサイズ処理。無制限の場合9999と指定
echo $thumb->src; // リサイズされた画像のURL
echo $thumb->width; // リサイズされた画像の横ピクセル
echo $thumb->height; // リサイズされた画像の縦ピクセル
// 上記3コードを適宜 <img> タグの中に埋め込む



// ページリスト関連 (ページリストのループ内の $c を $cobj と定義)
$cobj = $cArray[$i]; 

// ページリスト等:ページの小ページの数を取得 (ページリストなどに使える)
echo $cobj->getNumChildren();

// ページリスト等:ページが外部リンクで「_blank」指定があるかどうか
$cobj->getCollectionPointerExternalLink(cID)

// ターゲット属性「nav_target」を取得
$target = $cobj->getAttribute('nav_target');



// ページタイプのハンドルを取得する
$c->getCollectionTypeHandle();





// 特定のページタイプだったらエリアを表示させる
$pageType = $c->getCollectionTypeHandle();
if ($pageType =='【ページタイプのハンドル】') {
    $a = new Area('【エリア名】');
    $a->display($c);
}



// ヘッダーに js や css を追加させる
// テーマフォルダにリンクが飛ぶ。下層ディレクトリのファイルを指定することも可能。
$html = Loader::helper('html');
$this->addHeaderItem($html->css('somecss.css'));
$this->addHeaderItem($html->javascript('js/somejs.js')); // 仮想ディレクトリの JS 「テーマ/js/somejs.js」を読み込んでいる例



// ヘッダーに js や css を追加させる(パッケージに同梱させた場合)
$html = Loader::helper('html');
$this->addHeaderItem($html->css('somecss.css'), '【パッケージハンドル】');
$this->addHeaderItem($html->javascript('somejs.js'), '【パッケージハンドル】');

CSS コードスニペット

CSS のカスタマイズ機能をオンにした時に使えるパラメーター一覧
/* 【カスタマイズ定義の宣言】/ デフォルトの値 / 【カスタマイズ定義の宣言終わり】*/

「echo $this->getStyleSheet('【CSSファイル名】.css');」
でCSSを読み込む必要あり。

/* 背景色カスタマイズ */

/* customize_body-background */ background-color: #dff5ff; /* customize_body-background */
/* customize_header-background */ background-color: #fff; /* customize_header-background */
/* customize_main-background */ background-color: #fff; /* customize_main-background */
/* customize_footer-background */ background-color: #a0dbe3; /* customize_footer-background */
/* customize_tag-highlight */ background-color: #A0DBE3; /* customize_tag-highlight */

/* フォント色 */
/* customize_nav-links */ color: #000; /* customize_nav-links */ 
/* customize_nav-hover */ background-color: #a0dbe3; /* customize_nav-hover */
/* customize_site-title */ color: #000; /* customize_site-title */
/* customize_links */ color: #0099ff; /* customize_links */
/* customize_headings */ color: #000; /* customize_headings */
/* customize_text */ color: #000; /* customize_text */
/* customize_footer-text */ color: #000; /* customize_footer-text */

/* フォント種類 */
/* customize_paragraph_font */ font: normal normal normal 14px/1.8em 'Merriweather', Georgia, serif; /* customize_paragraph_font */

/* その他なんでも CSS を入れれるところ */
/* customize_miscellaneous */ /* customize_miscellaneous */

Javascript コードスニペット

// 相対URLパスの書き方 (via @acliss19xx)
//CCM_BASE_URL + CCM_REL + '/index.php'
//
// htmlブロックタイプはjavascriptの記述を許可していますので
//以下のように書けば絶対パスをべた書きしなくて済みます。
<a href ="#" onclick="location.href = CCM_BASE_URL + CCM_REL + '/index.php'">ホーム</a>

菱川教授

■ 多言語グローバルエリア
Internationalization アドオンを使った多言語サイトで、グローバルエリアを言語ごとに自動生成する追加機能
https://gist.github.com/hissy/7396557

■ ページリスト掲載中の新着記事に「New」マークを付ける方法
https://gist.github.com/hissy/7396557

katzueno
concrete5 Japan コミュニティリーダー。コンクリートファイブジャパン株式会社の CCO。YokosoNews で日本を英語で世界に発信。元々はロスでインディー映画制作やエンタメ雑誌の編集。
http://katzueno.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away