cd-kaz

ページ閲覧中に自分を含むTopLevelフォルダ内のみを階層表示して、自分と兄弟関係にあるページとフォルダの一覧表示をするには?

0

こんにちは、お世話になっております。
現在、MT6をCMSとしてサイトを開発中です。

そこで、早速の質問なのですが
あるページを閲覧中に、自分を含むTopLevelフォルダのみを表示し、そこに含まれるフォルダやページを階層的に表示できないものかと悩んでおります。
具体的には、下記のようなフォルダとページ構成のとき

ルート
┣アメリカ(フォルダ)
┃┣ニューヨーク(ページ)←ページA
┃┗シカゴ(ページ)
┣イギリス(フォルダ)
┣日本(フォルダ)
┃┣北海道(フォルダ)
┃┣東北(フォルダ)
┃┃┣青森(フォルダ)
┃┃┣岩手(フォルダ)
┃┃┣秋田(フォルダ)
┃┃┣宮城(フォルダ)
┃┃┃┣気仙沼(ページ)←ページB
┃┃┃┣石巻(ページ)
┃┃┃┗仙台(フォルダ)
┃┃┃ ┣青葉山(ページ)
┃┃┃ ┣伊達政宗(ページ)←ページC
┃┃┃ ┗広瀬川(ページ)
┃┃┣山形(フォルダ)
┃┃┗福島(フォルダ)
┃┗関東(フォルダ)
┃フランス(フォルダ)
┃┣パリ(ページ)
┃┣リヨン(ページ)
┃┗ニーズ(ページ)
┗ドイツ(フォルダ)

■ページAを閲覧時には
自分のページ(ニューヨーク)を含むTopLevelフォルダ(アメリカ)と、自分と兄弟関係にある「ページ」(シカゴ)をのみを表示...

ルート
┗アメリカ(フォルダ)
 ┣ニューヨーク(ページ)←ページA
 ┗シカゴ(ページ)

■ページBを閲覧時には
自分のページ(気仙沼)を含むTopLevelフォルダ(日本)とそこに含まれる「フォルダ」を階層表示した上で、自分と兄弟関係にある「ページとフォルダ」のみを表示...

ルート
┗日本(フォルダ)
 ┣北海道(フォルダ)
 ┣東北(フォルダ)
 ┃┣青森(フォルダ)
 ┃┣岩手(フォルダ)
 ┃┣秋田(フォルダ)
 ┃┣宮城(フォルダ)
 ┃┃┣気仙沼(ページ)←ページB
 ┃┃┣石巻(ページ)
 ┃┃┗仙台(フォルダ)
 ┃┣山形(フォルダ)
 ┃┗福島(フォルダ)
 ┗関東(フォルダ)

■ページCを閲覧時には
自分のページ(伊達政宗)を含むTopLevelフォルダ(日本)とそこに含まれる「フォルダとページ」を階層表示した上で、自分と兄弟関係にある「ページ」を表示...

ルート
┗日本(フォルダ)
 ┣北海道(フォルダ)
 ┣東北(フォルダ)
 ┃┣青森(フォルダ)
 ┃┣岩手(フォルダ)
 ┃┣秋田(フォルダ)
 ┃┣宮城(フォルダ)
 ┃┃┣気仙沼(ページ)
 ┃┃┣石巻(ページ)
 ┃┃┗仙台(フォルダ)
 ┃┃ ┣青葉山(ページ)
 ┃┃ ┣伊達政宗(ページ)←ページC
 ┃┃ ┗広瀬川(ページ)
 ┃┣山形(フォルダ)
 ┃┗福島(フォルダ)
 ┗関東(フォルダ)

というようにナビゲーションを変えたいのですが、出来ずに困っています。

<mt:SubFolders top="1">

<mt:FolderHeader><ul></mt:FolderHeader>
<mt:SetVarBlock name="pageFolder"><mt:PageFolder><mt:FolderLabel /></mt:PageFolder></mt:SetVarBlock>

<li>
<mt:FolderLabel />
<mt:If tag="FolderLabel" eq="$pageFolder">
<mt:Pages>
<mt:PagesHeader><ul></mt:PagesHeader>
<li><a href="<mt:pagePermalink>"><mt:PageTitle /></a></li>
<mt:PagesFooter></ul></mt:PagesFooter>
</mt:Pages>
</mt:If>
<mt:SubFolderRecurse />
</li>

<mt:FolderFooter></ul></mt:FolderFooter>

</mt:SubFolders>

のように書くと、自分と同じフォルダにある兄弟ページを抽出表示し、ほかはフォルダ名のみを表示させることは出来るのですが、関係のないTopLevelフォルダやそこに含まれるフォルダまで表示されてしまい困っています。

このように、自分を含むTopLevelフォルダ内のフォルダとページを階層表示させ、階層的概念上、自分自身と兄弟関係にあるページとフォルダを抽出表示させることは出来ないでしょうか?

どなたかご教示いただけると幸いです。

返信(5)

| 返信する
  • 追加:

    うっかり、プラグインカテゴリーに投稿してしまいましたが、プラグインを使用せず、変数などをうまく利用して実現したいと思います。

  • >cd-kazさん
    こんにちは。
    以下のテンプレートでできました。
    解説は当方のブログに後日書きたいと思います。

    <mt:PageFolder>
      <$mt:SetVar name="page_folder_depth" value="0"$>
      <$mt:FolderID setvar="page_folder_id"$>
      <mt:ParentFolders>
        <$mt:SetVar name="page_folder_depth" op="++"$>
      </mt:ParentFolders>
      <mt:TopLevelFolder>
        <$mt:FolderLabel setvar="top_folder"$>
      </mt:TopLevelFolder>
    </mt:PageFolder>
    <$mt:PageID setvar="page_id"$>
    <$mt:SetVar name="folder_depth" value="1"$>
    <mt:SubFolders category="$top_folder" class_type="folder" include_current="1">
      <mt:SubCatIsFirst><ul></mt:SubCatIsFirst>
      <li><$mt:FolderLabel$>
      <mt:If name="folder_depth" lt="$page_folder_depth">
        <$mt:SetVar name="folder_depth" op="++"$>
        <$mt:SubCatsRecurse class_type="folder"$>
        <$mt:SetVar name="folder_depth" op="--"$>
      </mt:If>
      <mt:If tag="FolderID" eq="$page_folder_id">
        <ul>
        <mt:Pages>
          <mt:If tag="PageID" eq="$page_id">
            <li class="current"><$mt:PageTitle$></li>
          <mt:Else>
            <li><a href="<$mt:PagePermalink$>"><$mt:PageTitle$></a></li>
          </mt:If>
        </mt:Pages>
        <mt:SubFolders>
          <li><$mt:FolderLabel$></li>
        </mt:SubFolders>
        </ul>
      </mt:If>
      </li>
      <mt:SubCatIsLast></ul></mt:SubCatIsLast>
    </mt:SubFolders>
    
  • >壱さま

    お世話になっております。これまでも何度か助けて頂いております。
    凄すぎます、コードをそのまま使用したところ、サクッと実現できています。
    コードを拝見しても、これは自分のスキルで実現することは出来ませんでした。
    ありがとうございます。

    じつは、もう少し簡単に実現できるかと考えていたんですが、<mt:Pages>タグ内で<mt:ParentFolders>を使用すると、自分の上位フォルダをTopLevelまで遡ることは可能なのですが、同じTopLevelフォルダ内に属す親の兄弟フォルダは追跡できず、また<mt:SubFolders>内で<$mt:SubFolderRecurse$>を利用しフォルダを階層化しようとすると、関係のないフォルダ内のフォルダまでなぞってしまって、困り果てていました。

    重ねて、ありがとうございます。

    改めて、解説を拝見させていただきますが、取り急ぎお礼申し上げます。

  • >cd-kazさん
    こんにちは。

    記事を公開しました。
    当初のテンプレートから若干修正しています。

    http://www.h-fj.com/blog/archives/2015/02/16-132115.php
    http://www.h-fj.com/blog/archives/2015/02/17-154538.php

  • >壱さま

    大変わかり易くご説明いただきありがとうございます。
    また、お礼が遅くなってしまい申し訳ありませんでした。

返信する


OpenID対応しています OpenIDについて