On March 26, 2019 we launched new MODX Forums. Please join us at the new MODX Community Forums.
Subscribe: RSS
  • A)タグを持つドキュメント a.html

    B)同じタグを持つドキュメントを一覧表示するためのドキュメント tags.html

    上記の様な構造で:

    A)に、[[TagLinks]]で、リンクを出力しています。
    B)tags.html と言うドキュメント上で、該当するタグがh1で見出しとして表示されるようにしています。

    例えば、Smart Phoneと言うタグがある場合、

    <"a href="http://xxx.com/tags.html?tags=smart+phone">Smart Phone</a>

    と言うリンクが生成されます。
    この場合、B)で一覧表示された時、h1の見出しに「smart phone」と表示されてしまいます。
    これを本来のタグ名通り「Smart Phone」と表示したく思っています。
    A)上のタグリンクを大文字、小文字を区別して出力することは可能でしょうか?

    例:<"a href="http://xxx.com/tags.html?tags=Smart+Phone">Smart Phone</a>
      (パス内のSmart+Phoneを大文字、小文字区別したい)


    都合により、プラグインの追加等はできないため、
    スニペットや、パラメーター等で解決できる方法を探しています。

    アドバイスがあれば大変ありがたく思います。
    よろしくお願いします。
    • &caseSensitive=`1`


      ではダメでしょうか?
      • こんにちは。
        ご返信どうもありがとうございます。

        すみません、説明が足りていませんでした。

        &caseSensitive=`1`

        はすでに試しているのですが、出力されるリンク先は全て小文字になってしまう状況です。

        ちなみにA)内は

        [[TagLinks? &id=`[+id+]` &tv=`tv_tags` &caseSensitive=`1` &separator=` | ` &path=`/tags.html`]]

        と言う様な記述にしています。
        • B)上で「<h1>~</h1>」はどう記述していますか?
          • こんにちは。

            B)のほうは「<h1>[+tags+]</h1>」となっています。


            A)で生成されたリンクの小文字部分▼を

            http://xxx.com/tags.html?tags=smart+phone

            下記の様に変更してアクセスしてみると、「<h1>〜〜</h1>」もきちんと大文字小文字が区別されて表示されました。

            http://xxx.com/tags.html?tags=Smart+Phone

            よろしくお願いします。
            • TagLinksスニペットの以下の部分(リンクを生成しているところ)ですが…

              /**
              * Create a series of HTML anchors with hrefs if &format
              * is set to `a`.
              */
              if ($format == 'a'){
              $link .= "$label";
              	for ($x=0;$x<$cnt;$x++) {
              		$url = urlencode(trim($tvarray[$x]));
              		$cnd_separator = ($x!=($cnt-1)) ? $separator : '';
              	   $link .= '<a href="'.$doc_path.strtolower($url).'">'.trim($tvarray[$x]).'</a>'.$cnd_separator.$nl;	
              	}
              } else {
              
              /**
              * Otherwise genereate a series of list items with a hrefs if &format
              * is set to ordered or unordered list.
              */
              	$link .= '<'.$format.'>'.$nl;
              	$link .= '<li class="'.$style.'_label">'.$label.'</li>'.$nl;
              	for ($x=0;$x<$cnt;$x++) {
              		$url = urlencode(trim($tvarray[$x]));
              		$cnd_separator = ($x!=($cnt-1)) ? $separator : '';
              	   $link .= '<li><a href="'.$doc_path.strtolower($url).'">'.trim($tvarray[$x]).'</a>'.$cnd_separator.'</li>'.$nl;
              	}
              	$link .= '</'.$format.'>'.$nl;
              }
              


              ここに2箇所出てくる

              strtolower($url)


              の部分で強制的に小文字化してますね。

              URLとしてはこうするのが正解なのか、他に何の意図があるのか私には分かりませんが、
              strtolower()関数を外せば所望の結果を得られるのではないでしょうか?
              • tkfmさん、

                こんばんわ。
                まさにその関数を外したらうまく動作するようになりました!
                自分の力ではとてもそこまで到達できませんでした。

                ありがとうございました。

                恐縮ながら追加で質問させてもらいたいのですが、

                B)で、複数のタグに属するドキュメントを表示したい場合、以下の様なURLでアクセスしたとします。

                URL:http://xxx.com/tags.html?tags=Smart+Phone,Top+Sellers

                上記の場合「<h1>〜</h1>」には「Smart Phone,Top Sellers」
                と表示されますが、このseparatorにあたる「,」の後にスペースを入れく思っています。

                「[+tags+]」に「&separator=`, `」の様なパラメーターを入れたいのですが、現状うまくいかずにいます。
                何か方法はあるでしょうか?
                初心者ですみません。

                ※補足
                http://xxx.com/tags.html?tags=Smart+Phone,%20Top+Sellers」と、URL側にスペースを入れてみましたがうまく行きませんでした
                • B)のドキュメントの[+tags+]はDittoが出力していると思います。
                  今のDittoコールはどんなものになっていますか?

                  Dittoの Tagging Extender でデリミタの指定ができます。
                  http://ditto.modxcms.com/files/assets/snippets/ditto/extenders/tagging-extender-inc-php.html
                  &tagDelimiter=`, `


                  またリンクを生成する tagLinks スニペットコールの方は
                  &separator=`, `

                  でセパレータの指定ができますが、urlencodeが上手くかからないかも?