■ユーザーズフォーラム リニューアルのお知らせ
新規投稿は新ユーザーズフォーラムにお願いします。

ブログの記事のPrev/Nextの部分の≫、≪マークの削除もしくは変更

 

 1  |  2   | 次のページ>

seto > Re: ブログの記事のPrev/Nextの部分の≫、≪マークの削除もしくは変更 @ 2018/10/31 12:39
> アドバイスに従い、このように書き直しました。
はい、大丈夫そうです。

> この部分がまだ少しわかりません。
p関数を使うことで、正しく前後の記事を取得できているか確認できると、お伝えしたかったのです。

前後の記事の情報さえ取得できれば、後はprevLink・nextLinkに前後の記事のタイトルを渡すと、目的が達成できるかと思います。

<?php
$prevPost = getPrevPost($post);
$prevPostTitle = $this->Blog->getPostTitle($prevPost, false);
$this->Blog->prevLink($post, $prevPostTitle);
?>

Nori > Re: ブログの記事のPrev/Nextの部分の≫、≪マークの削除もしくは変更 @ 2018/10/30 15:36
<?php
/**
 * ブログ詳細ページ
 */
$this->BcBaser->setDescription($this->Blog->getTitle() . '|' . $this->Blog->getPostContent($post, false, false, 50));

# single.php

function getPrevPost($post) {
		$BlogPost = ClassRegistry::init('Blog.BlogPost');
		// 投稿日が年月日時分秒が同一のデータの対応の為、投稿日が同じでIDが大きいデータを検索
		$conditions = [];
		$conditions['BlogPost.id <'] = $post['BlogPost']['id'];
		$conditions['BlogPost.posts_date'] = $post['BlogPost']['posts_date'];
		$conditions['BlogPost.blog_content_id'] = $post['BlogPost']['blog_content_id'];
		$conditions = am($conditions, $BlogPost->getConditionAllowPublish());
		$order = 'BlogPost.posts_date DESC, BlogPost.id DESC';
		// 毎秒抽出条件が違うのでキャッシュしない
		$prevPost = $BlogPost->find('first', [
			'conditions' => $conditions,
			'order' => $order,
			'recursive' => 0,
			'cache' => false
		]);
		if (empty($prevPost)) {
			// 投稿日が古いデータを取得
			$conditions = [];
			$conditions['BlogPost.posts_date <'] = $post['BlogPost']['posts_date'];
			$conditions['BlogPost.blog_content_id'] = $post['BlogPost']['blog_content_id'];
			$conditions = am($conditions, $BlogPost->getConditionAllowPublish());
			// 毎秒抽出条件が違うのでキャッシュしない
			$prevPost = $BlogPost->find('first', [
				'conditions' => $conditions,
				'order' => $order,
				'recursive' => 0,
				'cache' => false
			]);
		}
		return $prevPost;
	}

function getNextPost($post) {
		$BlogPost = ClassRegistry::init('Blog.BlogPost');
		// 投稿日が年月日時分秒が同一のデータの対応の為、投稿日が同じでIDが小さいデータを検索
		$conditions = [];
		$conditions['BlogPost.id >'] = $post['BlogPost']['id'];
		$conditions['BlogPost.posts_date'] = $post['BlogPost']['posts_date'];
		$conditions['BlogPost.blog_content_id'] = $post['BlogPost']['blog_content_id'];
		$conditions = am($conditions, $BlogPost->getConditionAllowPublish());
		$order = 'BlogPost.posts_date, BlogPost.id';
		// 毎秒抽出条件が違うのでキャッシュしない
		$nextPost = $BlogPost->find('first', [
			'conditions' => $conditions,
			'order' => $order,
			'recursive' => 0,
			'cache' => false
		]);
		if (empty($nextPost)) {
			// 投稿日が新しいデータを取得
			$conditions = [];
			$conditions['BlogPost.posts_date >'] = $post['BlogPost']['posts_date'];
			$conditions['BlogPost.blog_content_id'] = $post['BlogPost']['blog_content_id'];
			$conditions = am($conditions, $BlogPost->getConditionAllowPublish());
			// 毎秒抽出条件が違うのでキャッシュしない
			$nextPost = $BlogPost->find('first', [
				'conditions' => $conditions,
				'order' => $order,
				'recursive' => 0,
				'cache' => false
			]);
		}
		return $nextPost;
	}

?>


お疲れ様です。
アドバイスに従い、このように書き直しました。
間違いないでしょうか?

引用:
あとは、こうして使うことで前後の記事のデータが取得できます。
$prevPost = getPrevPost($post);
p($prevPost);

$nextPost = getNextPost($post);
p($nextPost);


この部分がまだ少しわかりません。
申し訳ありませんが今一度アドバイスお願いいたします。

■ BaserCMSのバージョン:4.1.3
■ レンタルサーバー名:ロリポップ
■ スマートURLの利用:OFF
■ 設置フォルダ:サブフォルダ
■ 利用しているデータベース:MySQL
■ PHPスキル:D

seto > Re: ブログの記事のPrev/Nextの部分の≫、≪マークの削除もしくは変更 @ 2018/10/30 10:25
Noriさんの書かれたgetPrevPost・getNextPostと、ブログプラグインのgetPrevPost・getNextPostとで、コードが違うようです。

こちらからそのままコピーしてください。
https://github.com/baserproject/basercms/blob/dev-4/lib/Baser/Plugin/Blog/View/Helper/BlogHelper.php#L1151

あとは、こうして使うことで前後の記事のデータが取得できます。
$prevPost = getPrevPost($post);
p($prevPost);

$nextPost = getNextPost($post);
p($nextPost);
Nori > Re: ブログの記事のPrev/Nextの部分の≫、≪マークの削除もしくは変更 @ 2018/10/29 15:56
<?php
/**
 * ブログ詳細ページ
 */
$this->BcBaser->setDescription($this->Blog->getTitle() . '|' . $this->Blog->getPostContent($post, false, false, 50));

# single.php

function getPrevPost($post) {
			$_htmlAttributes = ['class' => 'prev-link', 'arrow' => ''];
		$htmlAttributes = am($_htmlAttributes, $htmlAttributes);
		$arrow = $htmlAttributes['arrow'];
		unset($htmlAttributes['arrow']);
		if ($prevPost) {
			if (!$title) {
				$title = $arrow . $prevPost['BlogPost']['name'];
			}
			echo $this->getPostLink($prevPost, $title, $htmlAttributes);
		}

}

function getNextPost($post) {
			$_htmlAttributes = ['class' => 'next-link', 'arrow' => ''];
		$htmlAttributes = am($_htmlAttributes, $htmlAttributes);
		$arrow = $htmlAttributes['arrow'];
		unset($htmlAttributes['arrow']);
		if ($nextPost) {
			if (!$title) {
				$title = $nextPost['BlogPost']['name'] . $arrow;
			}
			echo $this->getPostLink($nextPost, $title, $htmlAttributes);
		}

}
?>


上記のように既存の所にBlogHelperの該当箇所と思うところを修正し追記しましたが、
変化せず、相変わらず≪もしくは≫マークが表示されます…

なにか間違いありますでしょうか?

■ BaserCMSのバージョン:4.1.3
■ レンタルサーバー名:ロリポップ
■ スマートURLの利用:OFF
■ 設置フォルダ:サブフォルダ
■ 利用しているデータベース:MySQL
■ PHPスキル:D

seto > Re: ブログの記事のPrev/Nextの部分の≫、≪マークの削除もしくは変更 @ 2018/10/29 12:23
> 私の見つけたBlogHelper.php内で該当する記述はこちらかと思っています。
prevLink・hasPrevLink・nextLink・hasNextLink ではなく、getPrevPost と getNextPost です。

> あと、single.phpにそれぞれの関数を置く、との事ですが具体的にどちらに置けばよいでしょうか…(;^_^A
single.phpの中でしたらどこでも大丈夫です。
Nori > Re: ブログの記事のPrev/Nextの部分の≫、≪マークの削除もしくは変更 @ 2018/10/29 10:50
seto 様


頂いたアドバイスですが、
もう少し詳細を教えて頂けますでしょうか?

私の見つけたBlogHelper.php内で該当する記述はこちらかと思っています。

/**
 * 前の記事へのリンクを出力する
 *
 * @param array $post ブログ記事
 * @param string $title タイトル
 * @param array $htmlAttributes HTML属性
 *	※ HTML属性は、HtmlHelper::link() 参照
 * @return void
 */
	public function prevLink($post, $title = '', $htmlAttributes = []) {
		$prevPost = $this->getPrevPost($post);
		$_htmlAttributes = ['class' => 'prev-link', 'arrow' => '≪ '];
		$htmlAttributes = am($_htmlAttributes, $htmlAttributes);
		$arrow = $htmlAttributes['arrow'];
		unset($htmlAttributes['arrow']);
		if ($prevPost) {
			if (!$title) {
				$title = $arrow . $prevPost['BlogPost']['name'];
			}
			echo $this->getPostLink($prevPost, $title, $htmlAttributes);
		}
	}

/**
 * 前の記事へのリンクがあるかチェックする
 *
 * @param array $post ブログ記事
 * @return bool
 */
	public function hasPrevLink($post) {
		$prevPost = $this->getPrevPost($post);
		if ($prevPost) {
			return true;
		}
		return false;
	}
	
/**
 * 次の記事へのリンクを出力する
 *
 * @param array $post ブログ記事
 * @param string $title タイトル
 * @param array $htmlAttributes HTML属性
 *	※ HTML属性は、HtmlHelper::link() 参照
 * @return void
 */
	public function nextLink($post, $title = '', $htmlAttributes = []) {
		$nextPost = $this->getNextPost($post);
		$_htmlAttributes = ['class' => 'next-link', 'arrow' => ' ≫'];
		$htmlAttributes = am($_htmlAttributes, $htmlAttributes);
		$arrow = $htmlAttributes['arrow'];
		unset($htmlAttributes['arrow']);
		if ($nextPost) {
			if (!$title) {
				$title = $nextPost['BlogPost']['name'] . $arrow;
			}
			echo $this->getPostLink($nextPost, $title, $htmlAttributes);
		}
	}
	
/**
 * 次の記事へのリンクが存在するかチェックする
 *
 * @param array $post ブログ記事
 * @return bool
 */
	public function hasNextLink($post) {
		$nextPost = $this->getNextPost($post);
		if ($nextPost) {
			return true;
		}
		return false;
	}


それぞれ

	public function nextLink($post, $title = '', $htmlAttributes = []) {

	public function hasNextLink($post) {


というような感じで1行目がスタートしているので、
微妙に違うのですが…(;^_^A

あと、single.phpにそれぞれの関数を置く、との事ですが具体的にどちらに置けばよいでしょうか…(;^_^A

■ BaserCMSのバージョン:4.1.3
■ レンタルサーバー名:ロリポップ
■ スマートURLの利用:OFF
■ 設置フォルダ:サブフォルダ
■ 利用しているデータベース:MySQL
■ PHPスキル:D

seto > Re: ブログの記事のPrev/Nextの部分の≫、≪マークの削除もしくは変更 @ 2018/10/29 10:25
Helperに処理を置くことは正しいですが、まずは動かすところからやってみましょう。

single.phpに、getPrevPost関数とgetNextPost関数を置いてください。
そうすれば、single.phpでgetPrevPost関数とgetNextPost関数を使用できるようになります。

# single.php

function getPrevPost($post) {
	# BlogHelperから持ってきたコードをここに貼り付ける
}

function getNextPost($post) {
	# BlogHelperから持ってきたコードをここに貼り付ける
}
Nori > Re: ブログの記事のPrev/Nextの部分の≫、≪マークの削除もしくは変更 @ 2018/10/26 17:58
ご説明いただきありがとうございます!

ひとつ前のアドバイスから
lib/Baser/Plugin/Blog/View/Helper/BlogHelper.php
に該当する箇所(≪と≫を指示している箇所)を見つけたのですが、
これの該当箇所を変更して書き写すという方法ではなくて、
あくまでgetPrevPost.phpとgetNextPost.phpを新規作成した方が良いのでしょうか?
(今回のアドバイスを見る前に自分なりに考えて挑戦していたもので…ちなみに[アカウント名]/theme/bccolumn/Helper/へのBlogHelper.phpのアップでは機能せず困っていたところです…(;^_^A)

なお、今回のアドバイスの、新規作成する2つは他の追加のphpと同様に、theme内のElementにあげればよいでしょうか?

宜しくお願いいたします

■ BaserCMSのバージョン:4.1.3
■ レンタルサーバー名:ロリポップ
■ スマートURLの利用:OFF
■ 設置フォルダ:サブフォルダ
■ 利用しているデータベース:MySQL
■ PHPスキル:D

seto > Re: ブログの記事のPrev/Nextの部分の≫、≪マークの削除もしくは変更 @ 2018/10/26 16:35
いえ、コピペするだけなので、そんなに難しくありません。

まず、getPrevPostとgetNextPostのコードはこちらです。
お使いのbaserにも同じコードが入っているはずです。

getPrevPost
https://github.com/baserproject/basercms/blob/dev-4/lib/Baser/Plugin/Blog/View/Helper/BlogHelper.php#L1151

getNextPost
https://github.com/baserproject/basercms/blob/dev-4/lib/Baser/Plugin/Blog/View/Helper/BlogHelper.php#L1111

一番簡単な方法は、single.phpにこの2つの関数をコピーしてもってくることです。
そうすれば、single.phpから前後の記事の情報を取得できるようになります。
(※コピーの際は、function の前にある private を忘れずに取ってください。)
Nori > Re: ブログの記事のPrev/Nextの部分の≫、≪マークの削除もしくは変更 @ 2018/10/26 16:13
seto 様


ご返信の言葉から察するに、
相当専門的な改造が必要という事でしょうか?

既にお察しかとは思いますが、
私は完全に素人故、参考になる手順サイトなどあればまだ自力でやれるのですが…

■ BaserCMSのバージョン:4.1.3
■ レンタルサーバー名:ロリポップ
■ スマートURLの利用:OFF
■ 設置フォルダ:サブフォルダ
■ 利用しているデータベース:MySQL
■ PHPスキル:D

 

 1  |  2   | 次のページ>

ログイン
ユーザー名:
パスワード:


  新規登録 / パスワード紛失

検索

facebook
フォーラムで悩みが解決した場合など、よかったら「いいね!」をポチっとクリックしてください!質問の回答者や開発者の励みになります

フォーラムガイド


関連リンク

オンライン状況
49 人のユーザが現在オンラインです。 (45 人のユーザが フォーラム を参照しています。)

登録ユーザ: 0
ゲスト: 49