マルチサイト上でのBlog関数について

【環境情報】
・baserCMSのバージョン:4.3.5
・レンタルサーバー名:さくら
・PHPスキル(自己評価):E

お世話になります。
先日、マルチサイトについて質問させていただいた者です。
Qiitaの記事を参考にさせていただきき、無事にサブドメイン上にサブサイトを構築できました。
その弊害なのかもしれませんが…Blogの関数について困っています。
現在、

main.com … メインサイト
sub.main.com… サブサイト

として動いています。
サブサイト上で作ったBlogを呼び出す関数を利用すると、
メインサイトのURLが読み込まれてしまい、期待する動作になりません。

例えば、サブサイト上で作ったBlogを呼び出すために
$this->BcBaser->blogPosts( $contentsName , $num , [$options] ); で記事一覧を取得しようとすると
main.com/blog//archives/1 というURLになってしまいます。

これを、sub.main.com/blog//archives/1 と取得するにはどのようにすれば良いのでしょうか?
ご教示いただけると幸いです。よろしくお願いいたします。

@houjicha こんにちは。こちらの記事ですよね? https://qiita.com/ryuring/items/d7db653adb5827bed15b

実際に設定して動作を確認したところ、リンクはサブドメインのURLになりました。
つまり、再現できません。

use_subdomain : 1 に変更します
domain_type : 1 に変更します

mysite_sites テーブルのこの設定変更はできてますか??

ご返信ありがとうございます。

SQliteで動かしているせいか、そもそも「mysite_sites」というテーブルはなく、
「sites」というテーブルにuse_subdomain/domain_typeがありましたので、
こちらを「1」に致しました。

そうですね、SQLiteの場合、mysite_というプレフィックスは付きません。
設定値は正常なのですね。MySQLでは再現できませんでしたので、SQLiteでも試してみますね。

@houjicha

お手数おかけしまして申し訳ありません。
こちらでも色々と試してみていくつか法則性が見えてきました。

★Blogテンプレート内でのBlog関数呼び出しは問題なく動作。
~(テーマフォルダ)/Blog/ 内に配置するindexやarchivesについては
$this->Blog->getPostTitle($post); などの関数は問題なく動作しています。

★固定ページ内からのリンク
Blog記事に限らず、固定ページ内でのリンクについては、全てメインサイト下へのリンクになってしまいます。

<?php $this->BcBaser->link( 'サービスページへ','/service/'); ?>

→結果 <a href="main.com/service/">サービスページへ</a>

これで何かヒントになりますでしょうか?それともSQlite固有の症状という事なのでしょうか…?
解決策が無ければSQLでの運用も検討してみます。

@houjicha 実際に次のコードを実施してみました。

<?php $this->BcBaser->link( 'サービスページへ','/service/'); ?>

結果はこちらです。

<a href="/service/">サービスページへ</a>

link関数の仕様を見た所、ドメインは入らない仕様っぽいんですよね。なぜだろう…

試しに「xmlサイトマップクリエイター」でサイトマップを出力してみました。
出力データを見ると、

★メインサイトの固定ページ
<url>
<loc>https://www.******/company/tokyo</loc>
<lastmod>2019-08-29</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
★メインサイトのBlogページ
<url>
<loc>https://www.******/news/archives/1</loc>
<lastmod>2020-01-16</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>

★サブサイトの固定ページ
<url>
<loc>https://www.******/campaign</loc>
<lastmod>2020-06-26</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>

★サブサイトのBlogページ
<url>
<loc>https://www.******/サブドメイン/list/archives/1</loc>
<lastmod>2020-06-25</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>

不思議なことにサブサイトの固定ページのみ、サブドメインが入りません。
しかしながらブラウザ上ではサイトマップクリエイターで吐き出されたURLにアクセスしても
404エラーになり、サブドメインのURLにすればアクセス可能、となります。

検証していただいたリンク関数についてもドメインを含めた出力になっております。
リンク関数については、力業で
<?php $this->BcBaser->link( 'サービスページへ','https://サブドメイン/service/'); ?>
とすれば何とかなるのですが、Blog関数については最新記事が拾えずに途方に暮れております…

@houjicha xmlサイトマップクリエイターはサブドメインに対応してないと思います。

ちょっと気になったのは

Blog関数については最新記事が拾えずに途方に暮れております…

について。
前の記事では、

★Blogテンプレート内でのBlog関数呼び出しは問題なく動作

と書いてあったのですがどちらが正しいのでしょう?

言葉足らずですみません。
「固定ページからBlog関数を使うと最新記事が拾えない」状況です。

固定ページで
<?php $this->BcBaser->blogPosts('sumple', 1, array('template' =>'****')) ?>
が実現できません。

xmlサイトマップはサブドメインに対応していないとの事、了解しましたが、
xmlの出力結果や関数呼び出しの挙動を考えるに、現在の状況は
”サブサイト下にある固定ページが、サブサイト下として認識されていない?”
なのではないかと疑っています。。。

@houjicha
一個ずつ解決したいので、xmlサイトマップクリエイターの件は一旦忘れます。

ちなみにSQLite環境でも固定ページで、下記コードを書いた結果

<?php $this->BcBaser->link( 'サービスページへ','/service/'); ?>

こちらの文字列が出力されました。

 <a href="/service/">サービスページへ</a>

その上で質問です。

「固定ページからBlog関数を使うと最新記事が拾えない」ということですが、
利用しているBlog関数の実際のコードをここに貼って頂けますか?

入れ違いになってしましました。

実際のコードは以下です。

`<?php $this->BcBaser->blogPosts('release', 1, array('template' =>'newest')) ?>`
`<div class="release-list"><?php $this->BcBaser->link('もっとみる', '/release/') ?></div>`

最新1件を取得して表示し、「もっとみる」から記事一覧へ進みたいのですが、
いづれもメインサイトへのリンクに化けてしまうのです…

@houjicha

<?php $this->BcBaser->blogPosts('release', 1, array('template' =>'newest')) ?>

こちらについては次のようにしてください。明示的にサブドメイン名を含める必要があります。

<?php $this->BcBaser->blogPosts('/sub/release', 1, array('template' =>'newest')) ?>
<div class="release-list"><?php $this->BcBaser->link('もっとみる', '/release/') ?></div>

こちらについては次のように出力されました。

<a href="/release/">もっとみる</a>

お世話になります。色々とありがとうございます。

①明示的にサブドメイン名を含める

<?php $this->BcBaser->blogPosts('/sub/release', 1, array('template' =>'newest')) ?>

やってみましたが、結果は「ソース上になにも出力されない」状態です。
(※/sub/の部分ですが、これはサブサイト管理画面で設定したエイリアスですよね?
念のため識別名称でも試しましたが結果は一緒でした。)

②リンクタグ
<div class="release-list"><?php $this->BcBaser->link('もっとみる', '/release/') ?></div>
結果は
<div class="release-list"><a href="https://www.******/release/">もっとみる</a></div>
と、メインドメインのURLを含めた形でソースに出力されています。

③分からないなりに試行錯誤
/lib/Baser/Model/Content.php の1873~1879行目に

  • URLに関連するコンテンツ情報を取得する
  • @param bool $useSubDomain 対象をサブドメインを利用しているサイト設定内のコンテンツをするかどうか

という記述があり、その後の1895行目で

// 固定ページはURL拡張はしない

となっています。
これは、「サブドメインを利用していても固定ページではURLをメインドメインのままにする」
という意味合いだったりするのでしょうか?
ここに何か手を加えれば、「固定ページでURL拡張をする」に変えることはできますか?

的外れな事を言っていたら申し訳ありません。。。

@houjicha そもそもの質問なんですが、サブサイトのコンテンツ管理上には、「release」 というブログは存在していますか?

「①明示的にサブドメイン名を含める」がうまくいかないことがまずおかしいと思いまして。

これはサブサイト上のブログを呼び出すやり方です。

サブサイトのコンテンツ管理上には、「release」 というブログは存在していますか?

存在しています。ただ、記事はまだ1件も公開していないので、試しに同じサブドメイン上にある別のBlog(公開済み、記事100件程度あり)でも試してみましたが、結果は同じく「何も表示されない」でした。

もしよろしければ実際のページもご覧ください。
https://personal.******.co.jp/

ソース上、56~58行目が該当箇所になります。

@houjicha 同じ状況を作り出した上で再現させようとしてますが、どうしても再現することができません。
何かしら設定項目やサーバー環境が違うゆえに問題が起きているかと思いますが、フォーラム上ではちょっと限界かもしれません。
プライベートメッセで、FTPやSSHなどをお伺いし(必要であれば秘密保持契約などを交わし)調査させて頂いた方が早いかもしれません、、、

わざわざお手数をかけて申し訳ありません。

とりあえず、6月中の解決は見込めないこと、
これ以上の調査にはパートナー契約を結んでのご依頼が必要そうである旨
上長へ報告いたしました。

未解決ではありますが、一端保留とさせてください。
貴重なお時間を割いてただいて感謝いたします。

また追ってご連絡させていただきたいと思います。

※前投稿のURLについてはマスキングしておきます。

2 Likes