Joomla 3.3をインストールしました。自分のページにアクセスしている間、ビジターカウンターが増えないようにしたいのですが。少なくともログインしているときは可能ですか?
Joomla 3.3をインストールしました。自分のページにアクセスしている間、ビジターカウンターが増えないようにしたいのですが。少なくともログインしているときは可能ですか?
回答:
次のようなプラグインを作成できます。
class plgContentReduceHits extends JPlugin
{
public function onContentAfterDisplay($context, &$article, &$params, $limitstart)
{
if ($context == 'com_content.article' && JFactory::getUser()->id == $article->created_by && $params->get('intro_only'))
{
$db = JFactory::getDbo();
$db->setQuery('UPDATE #__content SET hits = hits - 1 WHERE id = ' . $article->id);
$db->execute();
}
return '';
}
}
上記のプラグインは動作します。サイトにログインし、プラグインを有効にする必要があることは明らかです。
Joomlaの組み込みヒットカウンターについて話していると仮定すると、私が見た限りの答えは「ノー」です。これを実行するコードは非常に単純で、CMSでこれを適応させる実際の手段はありません。(キャッシュを有効にすると、コードはヒットカウンターをインクリメントしません...)
記事のview.html.php
ファイルで現在行われていることは次のとおりです。
// Increment the hit counter of the article.
if (!$this->params->get('intro_only') && $offset == 0)
{
$model = $this->getModel();
$model->hit();
}
これが記事全体のロードの開始であることを確認するための基本的なチェック。その場合は、モデルをトリガーしてヒットを記録します。
モデルはこれを行います:
public function hit($pk = 0)
{
$input = JFactory::getApplication()->input;
$hitcount = $input->getInt('hitcount', 1);
if ($hitcount)
{
$pk = (!empty($pk)) ? $pk : (int) $this->getState('article.id');
$db = $this->getDbo();
$db->setQuery(
'UPDATE #__content' .
' SET hits = hits + 1' .
' WHERE id = ' . (int) $pk
);
try
{
$db->execute();
}
catch (RuntimeException $e)
{
$this->setError($e->getMessage());
return false;
}
}
return true;
}
基本的には、記事のヒット列を増やします。
現在、これの動作を調整したい場合は、コアコードを編集するしかありません(更新しようとすると、固有の問題が発生します)。
このアクションを「インターセプト」してプラグインをトリガーして代替アクションを実行する方法はありません。最善の策は、記事のヒット列を無視し、記事のビュー数をより適切に測定することです(おそらく、Googleアナリティクスが最も一般的な選択肢です)。
JEDでJProNoHitCount(http://extensions.joomla.org/extensions/authoring-a-content/admin-interface/22961)と呼ばれるプラグインを偶然見つけました。これにより、記事から除外するグループを1つ以上選択できますカウンターをヒット。
(これは商用プラグインであることに注意してください)。