0

我正在尝试设计一个显示客户餐厅菜单的目录网站。每个项目都链接到有关该项目的详细信息页面。我的目标是实现一个系统,帮助我收集用户感兴趣的项目的统计信息。我使用codeigniter进行开发。该系统应该能够解决以下问题:

  • 每次运行搜索查询并显示相关菜单项(加上图片)时,它应该记录每个项目的显示次数(展示次数)。
  • 每次用户单击图像以转到详细信息页面时,它应该记录每个项目的点击次数(点击次数)。
  • 我将通过电子邮件向网站的订户列表发送有关促销和新交易(包括图片)的信息。系统应记录打开的电子邮件数量和看到的图像(印象数)。
  • 如果用户单击电子邮件中的链接进入我网站的详细信息页面,系统应记录点击次数。

据我了解,应遵循的过程如下:

  1. 制作一个接受图像/页面标识符和代码的控制器。
  2. 控制器将在数据库中查找此 ID。
  3. 如果找到,它会根据 href 中包含的代码增加其展示次数(如果是图像)或点击次数(如果是到页面的链接)。
  4. 控制器返回与 ID 关联的实际图像数据或页面路径。

示例路径:

示例电子邮件:

hi, check this new dish out!
<a href="http://www.mysite.com/details/newdish/linkedbyemail">
    <img src="http://www.mysite.com/images/12345">
</a>

Details控制器将加载由 指示的视图,newdish如果linkedbyemail设置了参数,它也会记录点击计数。Images控制器将在数据库中找到 ID ,12345记录展示次数,并返回图像数据。

我可能有的选择是:

  • 在我的网站上使用谷歌分析(不知何故)来计算有多少横幅被投放和点击。我不知道这有多灵活,因为我需要收集每个图像/页面的统计信息。以及是通过电子邮件还是直接访问该页面。如果谷歌确实允许​​这样的收集,那是我能要求的最好的事情。
  • 使用处理这些需求的代码点火器火花/库。我搜索了很多,但还没有找到。如果你能在这里帮助我,那就太好了。
  • 推出我自己的统计机制。如果以上两个选项都不可能,那么我将不得不这样做。我想我在这里有基本的想法。如果我需要记住其他一些事情来实现这一点,请告诉我。

再一次,我需要能够记录谁(有多少用户)正在访问我的页面/图像以及从哪里访问(电子邮件/直接/或由外部网站链接)。

谢谢..

4

1 回答 1

1

首先..我很抱歉没有更彻底地搜索论坛..我确实遇到了一些帮助我找到解决方案的文章(虽然没有一个是直接的)..无论如何,这是我的解决方案..

资产表

  • ID (int, primary, auto inc)
  • 路径(字符串)
  • 印象计数(整数)

Assets_model 模型

  • GetPathByID ($iID) -> 返回具有给定 ID 的图像的实际路径
  • AddImpression ($iID) -> 增加具有给定 ID 的行的展示次数

SimAssets 库

class SimAssets
{
    const C_ASSETS_CONTROLLER = 'assets/index';

    public function GetTrackingAsset ($iImageID)
    {
        $sLink = sprintf('%s/%s/%u', config_item('base_url'), self::C_ASSETS_CONTROLLER, $iImageID);
        return $sLink;
    }
}

资产控制器

class Assets extends CI_Controller
{
    public function index ($sID)
    {
        $iID = intval($sID);
        $this->load->model ('assets_model');
        $sPath = $this->assets_model->GetPathByID($iID);
        if ($sPath !== NULL)
        {
            if (file_exists($sPath))
            {
                $this->assets_model->AddImpression ($sID);
                header (sprintf('Content-Length: %u',                           filesize($sPath)));
                header (sprintf('Content-Type: %s',                             'image/jpg'));
                header (sprintf('Content-Disposition: inline; filename=%s',     $sPath));
                echo readfile ($sPath);
            }
        }
    }
}

用法

echo '<img src="' . $this->simassets->GetTrackingAsset(3) . '">';

// <img src="http://localhost/Testing/index.php/assets/index/3">

正在完成什么

  1. 每个需要跟踪的页面/电子邮件都将包含一个指向定义为资产的图像的嵌入式链接。
    • 1, 1x1.jpg => 用于跟踪特定电子邮件促销的图像
    • 2, 1x1.jpg => 用于跟踪另一个特定电子邮件促销的图像
    • 3, 1x1.jpg => 在所有电子邮件中使用的图像来跟踪总共打开了多少封邮件
    • 4、DishA_thumb.jpg => 搜索页面上使用的图片,看看有多少搜索显示了这个项目
    • 5、DishA_large.jpg => 详情页上使用的图片,查看有多少人实际详细查看了此商品。
  2. 当对Assets控制器进行调用时,它会找到具有给定 ID 的图像的路径,将其呈现为图像,并增加其展示次数。

可以进一步做什么

  1. 可以从Assets表中删除 ImpressionCount 并创建一个新表AssetTracking,如下所示:
    • 资产 ID(整数)
    • 上次访问时间 (time_stamp)
    • 标记(字符串)
  2. 可以将第二个参数添加到包含标签的资产链接(唯一标识访问者的信息,此链接是否出现在页面或电子邮件中等)
  3. AddImpression 将简单地使用给定的和在AssetTracking表中添加一个新行。AssetIDTag

  4. 可以将类似的方法添加到SimAssets返回页面 URL 而不是图像 URL 的库中。

  5. 可以将另一种方法添加到Assets控制器,检查传递的页面 ID、记录命中并重定向到实际页面 URL。这使我能够:
    • 发送包含页面 ID 而非页面 URL 的链接的电子邮件
    • 当用户点击链接时,控制器会将他们重定向到适当的页面,同时记录给定页面 ID 的点击。

两种方案的结合

创建电子邮件:

<img src="http://localhost/Test/index.php/assets/image/1/User123" style="display:none">
// actually loads http://localhost/Test/1x1.jpg

Hi, we at XYZ have a new promotion offer for a 
<a href="http://localhost/Test/index.php/assets/pages/1/User123">New Pizza</a>.
Can we tempt you with it? =)
// actually redirects to http://localhost/Test/index.php/items/detail/newpizza

当电子邮件呈现时,它会记录 User123 请求的 1x1.jpg(因此阅读电子邮件)。如果用户单击链接跳转到我的站点,资产控制器将记录 User123 通过电子邮件到达给定页面。可能性是无止境。=)

希望这对某人有帮助.. =)

于 2013-04-23T01:46:08.063 回答