テーマを作る上で、良く使うスニペット集を殴り書きです。PHPの開始&閉じタグを省いているので、適宜、<?php ?> の追加をお願いします。このコードは 5.6.3.1.ja で確認済み。h() など 5.6.2.1以降でないと使えない関数も使っています。
説明は時間があるときに別記事で行っていきます。 Katz がテーマ作成の時によく使うコードのたまり場です。
※ 殴り書きなので、もしかしたら間違っているコードあるかも。その場合はお知らせいただくと幸いです。
このページは concrete5.6.x 版です。 5.7.x 以降のコードスニペットはこちらから。
初稿: 2014/5/28 (木) ※ このページは随時更新していきます。
更新日: 2014/6/26 (木)
PHP コードスニペット
<?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; // 便利なコード集 // ログインエラーを表示 (view.php に記述) Loader::element('system_errors', array('error' => $error)); // 現在のページ情報を格納する。ファイルの最初に宣言しておいた方がいい(下記のコードもこれを使っている所あり) $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(); } // グローバルエリアの編集を表から行わない // HTML ブロック流しこみなどで、編集モードにした時に、表示が崩れすときなどの対策に使います。 $a = new GlobalArea('【グローバルエリア名】'); $a->disableControls(); $a->display(); // 編集モードだった場合の条件分岐 if ($c->isEditMode()) { // ここにコードや、HTML を書く。 } // 編集ツールバーが見えたときの条件分岐 (テーマや、ブロックの view.php内:5.6.x 以降) $cp = new Permissions($c); if ($cp->canViewToolbar()) { // ここにコードや、HTML を書く。 } // 編集ツールバーが見えたときの条件分岐 (テーマ・ブロック以外:5.6.x 以降) $cp = new Permissions($c); $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... } // ページタイプのデフォルトページだった場合 if ($c->isMasterCollection()) { // ここにコードや、HTML を書く。 } // ログイン・ログアウト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/9616508