MODXを再導入した

目次

やらかしたのでやり直し

 このサイトは、ローカル環境にWebMatrix+MODXを入れて構築したCMSで作っていたのですが、去年データベースを破損してしまいました。またか。 それからというもの手作業で更新していたのですが、さすがに限界かなー、新しいBootstrapも使いたいしなーということでMODX環境を再構築することにしました。

XAMPP Apache + MariaDB + PHP + Perl バージョン 7.4.33

 というわけで、再構築してHTMLファイルから手作業で復旧。ついでにサイトデザインも更新し、Bootstrap3からBootstrap5への以降も実施。 300以上のhtmlファイルを1個ずつ全て手作業移植は無理かと思っていたのですが、やればできるもんですね。

 作業する中で新しいスぺニットも作ったので、またやらかす前にここに記録しておくことにします。

リソースへのパスを相対パスにする

 リソースの階層に応じて「../」を追加します。 baseタグを使わずに相対パス記述を実現します。

相対パスを使用する場合は次の設定も必要。
メイン > ダッシュボード > グローバル設定 > フレンドリーURL
「フレンドリーURLを使用」を「はい」
「エイリアスパスを使用」を「はい」
そして<BASE>タグも使用しません。
 使用例:[[root_path]][~[*id*]~]

スぺニット名 [[root_path]]


// 現在のリソースIDがいる階層の数を取得します。
// $h_count = ルートの場合は0
$parent  = $modx->documentObject;
$id      = $parent ['id'];
$h_count = -1;
while(! is_null($id)){
	// echo $h_count . ':'. $id .'
'; $parent = $modx->getDocumentObject('id', $parent['parent']); $id = $parent ['id']; $h_count++; } // echo '階層 ' . $h_count; return str_repeat('../', $h_count);

 前回の記録を残していたことをすっかり忘れてたので、作り直してしまった。

連続するスペースを除去

 連続するスペースを除去。モディファイア用に作成。preg_replaceをモディファイアで使えれば良かったのだけど、なぜかうまく動かないので回避策。
使用例:[*content@100:strip_tags:cut_space:limit(50)*]
リソースID=100の content からHTMLと連続するスペースを除外した後、50文字取り出す。 他のコンテンツの冒頭一部を取り出すのに使っています。

スぺニット名 [[cut_space]]


return preg_replace('/\s+/',' ',$value);

現在のページのフルURL

 現在のページのフルURL。相対パス表記をしながらも、結局フルパスが必要なこともあるので。
使用例: https://twitter.com/intent/tweet?url={{current_url}}&text=[*pagetitle*]%20%7c%20[(site_name)]&hashtags=hogehoge

チャンク名 {{current_url}}


[(site_url)][~254~]

ページネーション

 近況ログで使用しているページネーションを作成するスぺニット。現在位置によって表示範囲を変更します。


// $year = 年
$year_start = 2023;
$year_end   = 2008;
$rn = "\r\n";

echo '<nav aria-label="Page navigation">'.$rn;
echo '  <ul class="pagination justify-content-center">'.$rn;
for ($count_year = $year_start; $count_year >= $year_end; $count_year--){
	if ($count_year == $year_end){
		if ($year > $year_end+2){
			echo '    <li class="page-item disabled "><a class="page-link" href="#">…</a></li>'.$rn;
		}
	}
	
	$class = ' d-none d-md-block';
	if ( $count_year == $year-1 || $count_year == $year+1 ){
		$class = '';
	}
	if ($count_year == $year) {
		$class = ' active" aria-current="page';
	}
	if (($count_year >= $year-2 && $count_year <= $year+2) || $count_year == $year_start || $count_year == $year_end ) {
		echo '    <li class="page-item'.$class.'"><a class="page-link" href="diary'.$count_year.'.htm">'.$count_year.'</a></li>'.$rn;
	}
	
	if ($count_year == $year_start){
		if ($year < $year_start-2){
			echo '    <li class="page-item disabled "><a class="page-link" href="#">…</a></li>'.$rn;
		}
	}
}
echo '  </ul>'.$rn;
echo '</nav>'.$rn;

文字化け

 なぜかモディファイアのregex_replacedateで日本語を使うと文字化けしてしまう。 いったい何が悪いのかは謎。追及はあきらめて日本語を使わないことで回避。


[*publishedon@100:date(%Y/%m/%d)*]

関連記事

  1. MODXを導入してみた MODXとは? CMSのひとつ。 Webサイトの更新やメンテ...
  2. MODXスニペット MODXのスペニットを変更  これまでMODXでサイト作成し...