啟用Joomla cache緩存快取同時並禁用了匹配點擊數(hits)

Joomla中啟用緩存,在提供緩存快取頁面時,文章匹配點擊數不會增加。不幸的是,這是Joomla中緩存快取系統的限制,沒有"切換開關"來啟用此功能。

命中並不總是準確,但有時需要

對於需要此功能的用戶,通常建議他們切換到更準確的跟踪系統,例如Google Analytics。這雖然是一種替代方案,但實際上並不能解決手頭的問題。即使不是100%準確,有時也需要文章點擊,例如當您需要根據文章的受歡迎程度訂購文章時。

我們創建了一個解決方

假設你已經在Joomla中啟用了緩存快取,需要增加文章的點擊量。在本教程中,我們將概述在提供緩存快取頁面時Joomla增加文章命中事件所採取的步驟。

  1. 禁用文章點擊

    我知道這聽起來很有趣,但整個過程的第一步是禁用文章命中。 我們正在實施的解決方案將使用ajax來增加文章命中率。 我們不希望Joomla在我們的ajax調用增加命中的同時增加命中率,這將導致雙擊。

    編輯以下文件並添加以下return true;代碼,如以下程式碼註解。

    components/com_content/models/article.php

    public function hit($pk = 0)
    {
        return true; //新增return 返回不執行以下程式碼
        $input = JFactory::getApplication()->input;
        $hitcount = $input->getInt('hitcount', 1);
        if ($hitcount) {
            $pk = (!empty($pk)) ? $pk : (int) $this->getState('article.id');
            $table = JTable::getInstance('Content', 'JTable');
            $table->load($pk);
            $table->hit($pk);
        }
        return true;
    }

    核心文件更改!

    此步驟編輯核心文件,不建議這樣做。 您可以跳過此步驟,但是當緩存未用於服務器頁面時,這將導致命中數增加2(而不是1)。

  2. 將您的點擊計數包含在範圍標記內

    在使用ajax進行調用以增加文章命中後,我們將更新頁面上當前的點擊計數器,以使其準確。 我們將使用 javascript,javascript 需要知道點擊顯示在頁面的哪個位置。 我們通過將文章包含在<span>標記內來標記文章命中計數。

    創建語言覆蓋並添加以紅色突出顯示的更改:

    Language Constant: COM_CONTENT_ARTICLE_HITS
    Text Hits: <span id="article_hits">%s</span>

    後台選單選擇 擴充套件 > 語言 > 覆蓋

    創建語言覆蓋

    再覆蓋頁面,選擇你的語系,並新增一筆資料。

    創建語言覆蓋

    填入要覆蓋的語言資訊,如下圖。

    創建語言覆蓋

    記得開啟文章顯示點擊數。(如不想顯示:可開啟後使用css display:none)

    創建語言覆蓋

  3. 將ajax調用添加到您的文章中

    現在是時候將ajax調用添加到我們的文章中了。 正是這個ajax調用發出了增加文章命中率的請求,無論是否通過緩存提供頁面,它都會運行。編輯以下文件,並在文件末尾添加以下代碼:

    components/com_content/views/article/tmpl/default.php

    <script type='text/javascript'>
        jQuery.post('<?php echo JURI::base(); ?>includes/increase_hits.php', {
            option: 'com_content',
            view: 'article',
            id: '<?php echo $this->item->id; ?>'
        }, function(data, status) {
            jQuery('#article_hits').html(data);
        }, 'text');
    </script>

    核心文件更改!

    此步驟編輯核心文件,不建議這樣做。 您應該將此代碼添加到覆蓋中,如何覆蓋Joomla的輸出!核心

  4. 創建increase_hits.php

    創建以下文件。 這是我們的ajax調用將與之交互的php腳本。

    includes/increase_hits.php

    <?php
        /**
        *  Use this script to update article hits when caching is enabled  
        *  Setup guide can be found here: https://www.inmotionhosting.com/support/edu/joomla-3/increase-hits-cache  
        */
        if ($_POST['option'] == "com_content" && $_POST['view'] == "article"  && is_numeric($_POST['id'])) {
            // connect to the database   
            include_once("../configuration.php");
            $cg = new JConfig;
            $con = mysqli_connect($cg->host, $cg->user, $cg->password, $cg->db);
            if (mysqli_connect_errno())     die('n/a');
            // increase hits   
            $query = "  UPDATE  `" . $cg->dbprefix . "content` SET  `hits` = `hits` + 1 WHERE `id` = " . $_POST['id'] . " LIMIT 1;";
            mysqli_query($con, $query);
            // grab the new hit count   
            $query = "  SELECT  `hits` FROM  `" . $cg->dbprefix . "content` WHERE `id` = " . $_POST['id'] . " LIMIT 1;";
            $new_hits = mysqli_fetch_assoc(mysqli_query($con, $query));
            // close the connection to the database   
            mysqli_close($con);
            echo $new_hits['hits'];
        }
    ?>

    就是這樣!這與我們自己的Joomla網站使用的方法相同。如果您在使用此功能時遇到任何問題,請隨時在下方發表評論。 或者,如果您有另一種方法,用戶可以實現在使用緩存快取時增加點擊數,也可以發布評論。

資料來源:Updating article hits when using Joomla cache

您也可能喜歡這些文章