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_replace
やdate
で日本語を使うと文字化けしてしまう。
いったい何が悪いのかは謎。追及はあきらめて日本語を使わないことで回避。
[*publishedon@100:date(%Y/%m/%d)*]