LoginSignup
1
0

More than 5 years have passed since last update.

a-blog cmsの関連エントリーの設定画面に「ブログ名」「公開日」を表示する

Posted at

related_entry.jpg

a-blog cmsには、エントリー同士を手動で関連付ける機能があります。

関連エントリー機能 | エントリーのカスタマイズ | カスタマイズtips | a-blog cms 制作者向け情報

しかし、デフォルトの状態では以下の制限があります。

  • 関連付けの対象となるのは同じブログ内のエントリーのみ
  • 関連付けたエントリーの一覧には「ブログ名」「公開日」が表示されない

実際の構築では、ブログ間の似たようなタイトルのエントリーを関連付けるケースが求められるため(講師紹介と授業・製品情報と事例など)、使い勝手が今ひとつです。

これを冒頭の画像のようにカスタマイズする方法を紹介します。

実装する場合の注意

ブログ名・日付の表示は、a-blog cmsのコアファイルを上書きします。バージョンアップの際に間違って削除しないよう、修正箇所を必ず資料などで保管・共有してください。

バージョン2.6.1.4で動作を確認していますが、今後のバージョンで不具合が発生する可能性もあります。PHPの基礎知識がない方の修正はお勧めしません。

1. 関連記事の候補で全ブログを対象とする

まず、関連記事の候補リストに全ブログのエントリーがヒットするようにします。これはa-blog cmsのドキュメントでも公開されている推薦のカスタマイズです。

特定の複数のブログのみを対象とすることはできません。管理者ではないブログも含め、すべてのブログのエントリーが対象となることにご注意ください。

オートコンプリート用のテンプレートを作成する

以下のファイルをエディタで開きます。なければ作成してください。

/themes/使用するテーマ/admin/module/field.html

ファイル冒頭に以下のスクリプトを追加して更新します。

<script type="text/javascript">
ACMS.Ready(function(){
    ACMS.Config.Admin.argGuidance.Admin_Entry_Autocomplete = ['bid', 'uid', 'cid', 'keyword', 'tag', 'field_', 'start', 'end'];
})
</script>

次に、以下のファイルを使用中するテーマの同一の階層に複製し、エディタで開いてください。

/themes/system/ajax/edit/autocomplete.json

1行目の開始タグにモジュールIDを付与して、保存してください。ここでは「autocomplete_custom」としていますがわかりやすい名前で構いません。

<!-- BEGIN_MODULE Admin_Entry_Autocomplete id="autocomplete_custom" -->

オートコンプリート用のモジュールIDを作成する

管理ページの「モジュールID」画面で、Admin_Entry_Autocompleteモジュールの定義を新規作成してください。識別名を「autocomplete_custom」として、設定は以下の通りにします。

  • グローバル「下の階層のブログが利用することを許可する」にチェックを入れる
  • 引数「ブログ」:親ブログを選択する
  • 引数「キーワード」:チェックを入れる
  • 階層「下階層のブログも含める」を選択する

2. ブログ名・公開日を表示できるようにする

以下の3箇所の修正が必要となります。

  1. データの表示関連を定義しているPHPファイル
  2. 編集画面のテンプレート
  3. オートコンプリートのテンプレート(前項のファイル)

データの表示関連を定義しているPHPファイルを編集する

以下のファイルをエディタで開いてください。これはa-blog cmsのコアファイルです。必ずバックアップを取ってください。

/php/ACMS/get.php

「buildRelatedEntries」で検索すると、840行目あたりに関数があります。
下にスクロールしていくと以下のコードがあるので、

$vars   = array(
    'related.eid'           => $eid,

    // 中略

), false),

以下のように「ブログ名」「公開日」を取得できるように修正してください。

$vars   = array(
    'related.eid'           => $eid,

    // 中略

    'related.blogName'      => ACMS_RAM::blogName($bid),
    'related.datetime'      => $row['entry_datetime'],
    ), false),

編集画面のテンプレートを修正する

以下のファイルを使用中するテーマの同一の階層に複製し、エディタで開いてください。
このテンプレートはバージョンアップの影響を受けやすいため、バージョンアップでも慎重に差分を確認してください。

/themes/system/admin/entry/edit.html

「categoryName.length」で検索すると26-34行目あたりに以下のコードが見付かります。ここは、エントリーの保存前に動的に処理している関連エントリーリストのテンプレートです。

<td>
    <input type="hidden" name="related[]" value="<%- id %>">
    <%- title %>
    <% if ( categoryName.length > 0 ) { %>
        / <span class="acms-admin-icon-category acms-admin-icon-mute acms-admin-margin-right-mini"></span><%- categoryName %>
    <% } %>
</td>

これを以下の通り編集してください(ブログ名と公開日が追加されています)。

<td>
    <input type="hidden" name="related[]" value="<%- id %>">
    <%- title %>
    <% if ( blogName.length > 0 ) { %>
        / <span class="acms-admin-icon-blog acms-admin-icon-mute acms-admin-margin-right-mini"></span><%- blogName %>
    <% } %>
    <% if ( categoryName.length > 0 ) { %>
        <span class="acms-admin-icon-category acms-admin-icon-mute acms-admin-margin-right-mini"></span><%- categoryName %>
    <% } %>
    <% if ( datetime.length > 0 ) { %>
        <span class="acms-admin-icon-time acms-admin-icon-mute acms-admin-margin-right-mini"></span><%- datetime %>
    <% } %>
</td>

続いて「{related.eid}」で検索すると以下のコードが見付かります。ここは、エントリーの保存後に静的に処理している関連エントリーリストのテンプレートです。

<tr class="js-related_entry_item sortable-item">
    <td class="acms-admin-table-nowrap item-handle"><i class="acms-admin-icon-sort"></i></td>
    <td>
        <input type="hidden" name="related[]" value="{related.eid}">
        {related.title}<!-- BEGIN_IF [{related.categoryName}/nem] --> / <span class="acms-admin-icon-category acms-admin-icon-mute acms-admin-margin-right-mini"></span>{related.categoryName}<!-- END_IF -->
    </td>
    <td class="acms-admin-table-nowrap">
        <input type="button" class="js-related_entry_remove acms-admin-btn-admin acms-admin-btn-admin-danger" value="<!--T-->削除<!--/T-->" />
    </td>
    <td class="acms-admin-table-nowrap">
        <a href="{related.url}" class="acms-admin-btn-admin" target="_blank"><!--T-->確認<!--/T--></a>
    </td>
</tr><!-- END related:loop -->

これを以下の通り編集、更新してください(ブログ名と公開日が追加されています)。

<tr class="js-related_entry_item sortable-item">
    <td class="acms-admin-table-nowrap item-handle"><i class="acms-admin-icon-sort"></i></td>
    <td>
        <input type="hidden" name="related[]" value="{related.eid}">
        {related.title}<!-- BEGIN_IF [{related.blogName}/nem] --> / <span class="acms-admin-icon-blog acms-admin-icon-mute acms-admin-margin-right-mini"></span>{related.blogName}<!-- END_IF --><!-- BEGIN_IF [{related.categoryName}/nem] --> <span class="acms-admin-icon-category acms-admin-icon-mute acms-admin-margin-right-mini"></span>{related.categoryName}<!-- END_IF --><!-- BEGIN_IF [{related.datetime}/nem] --> / <span class="acms-admin-icon-time acms-admin-icon-mute acms-admin-margin-right-mini"></span>{related.datetime}[date('Y/m/d H:i')]<!-- END_IF -->
    </td>
    <td class="acms-admin-table-nowrap">
        <input type="button" class="js-related_entry_remove acms-admin-btn-admin acms-admin-btn-admin-danger" value="<!--T-->削除<!--/T-->" />
    </td>
    <td class="acms-admin-table-nowrap">
        <a href="{related.url}" class="acms-admin-btn-admin" target="_blank"><!--T-->確認<!--/T--></a>
    </td>
</tr><!-- END related:loop -->

オートコンプリートのテンプレートを編集する

前項のオートコンプリート用のファイルを、再度エディタで開いてください。

/themes/system/ajax/edit/autocomplete.json

デフォルトでは以下の通りとなっていますが、

"label": "<!-- BEGIN categoryField -->({fieldCategoryName})<!-- END categoryField -->{title}",
"value": "<!-- BEGIN categoryField -->({fieldCategoryName})<!-- END categoryField -->{title}",
"title": "{title}",
"id": {eid},
"url": "{url}",
"datetime": "{date#Y}/{date#m}/{date#d} {date#H}:{date#i}",
"categoryName": "<!-- BEGIN categoryField -->{fieldCategoryName}<!-- END categoryField -->"

以下のように修正・更新してください(ブログ名を追加します)。

"label": "(<!-- BEGIN blog -->{blogName}<!-- END blog --><!-- BEGIN categoryField -->|{fieldCategoryName}<!-- END categoryField -->){title}",
"value": "(<!-- BEGIN blog -->{blogName}<!-- END blog --><!-- BEGIN categoryField -->|{fieldCategoryName}<!-- END categoryField -->){title}",
"title": "{title}",
"id": {eid},
"url": "{url}",
"datetime": "{date#Y}/{date#m}/{date#d} {date#H}:{date#i}",
"blogName": "<!-- BEGIN blog -->{blogName}<!-- END blog -->",
"categoryName": "<!-- BEGIN categoryField -->{fieldCategoryName}<!-- END categoryField -->"

最後に、関連エントリーがすべてのブログのエントリーを対象とするか、正しく動作するかを確認してください。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0