【问题标题】:Conditional Back OR Close link in PHPPHP中的条件返回或关闭链接
【发布时间】:2017-04-12 10:09:03
【问题描述】:

我曾多次尝试找到解决方案,但始终没有找到可行的解决方案。本质上,我正在尝试找到一种方法来获得功能上的“关闭”或“返回”链接。条件是如果使用只是来自同一站点内的另一个页面,或者用户是否从外部链接(搜索引擎或其他)进入此页面。

这里有几个链接可以进一步解释它的工作原理和示例: 此链接显示帖子的“列表”或存档:http://hillsiderancho.com/care-ministries/

一旦用户进入其中一个帖子 (http://hillsiderancho.com/care-ministries/celebrate-recovery/),右上角的链接应该显示为“返回”,并且应该只是充当浏览器的返回按钮,以允许用户返回查看页面列表(或可能引导他们访问此帖子的其他页面)。

另一个用例是,如果用户从外部站点进入帖子,按钮应显示为“关闭”,然后将用户指向列表页面,而不是让用户离开的“浏览器返回”功能再次访问该站点。我们希望将他们保留在站点中,让他们在同一区域进行更多探索。

这是我已有的代码,“返回”按钮在本节中几乎所有不同的帖子中都有不同的功能......似乎它从未达到“其他”条件,只会出现加上其他一些奇怪的引荐来源网址。 (我刚刚注意到在“else”条件下我的href上有一个错字,但无论哪种方式,它都没有进入该页面):

<div class="post-close-btn">
  <?php
  $previousPage = parse_url($_SERVER['HTTP_REFERER'], PHP_URL_HOST);
  $url = site_url();

  if ($previousPage = $url){ ?>
     <a href="<?php echo $_SERVER['HTTP_REFERER']; ?>" class="primaryBtn">
        <div class="inner vAlign">
           <span class="text">BACK</span>
        </div>
     </a>

  <?php } else { ?>
     <a href="/care-ministries/" class="primaryBtn">
        <div class="inner vAlign">
           <span class="text">Close</span>
        </div>
     </a>
  <?php } ?>

有人可以帮忙吗?

【问题讨论】:

  • “我们希望将他们保留在站点中,让他们从同一区域探索更多内容” – 然后提供一个链接/按钮“更多来自该区域。 ”无论到达当前帖子的“方式”如何,这都可能对用户有所帮助-因此无需首先隐藏/删除它。而一个只模拟浏览器内置返回功能的按钮是相当无稽之谈;我根本不会使用。
  • 我觉得你想多了。 A)您正在为一些非常混乱的路径和逻辑设置自己,并且 B)这更有可能使您的用户感到沮丧并导致他们离开。人们不喜欢不知道自己在哪里。如果他们想在您的网站中四处探索,请让他们通过提供易于理解的导航而不是棘手的后退按钮。
  • 我明白你们来自哪里,当然。但是,我不是这个(或其他具有类似设计和功能的项目)的设计师,这个 UI 很好,干净,最小。它更像是设计人员想到的一种“应用程序体验”方法,他们将帖子作为某种“面板”打开/关闭。即使这不是浏览器实际加载内容的方式。

标签: php wordpress


【解决方案1】:

您在 if 语句中设置变量,而不是检查其值。

if ($previousPage = $url)

应该是:

if ($previousPage == $url)

【讨论】:

  • 啊,不错。我解决了这个问题,但它仍然没有解决我的问题。但它确实让我参与其中......我需要在 URL 变量定义中添加一个额外的步骤。 $previousPage 正在返回:hillsiderancho.com - 而 - $url 正在返回 hillsiderancho.com。所以它永远不会“相等”,因此总是运行“else”条件。
【解决方案2】:

在纠正我的变量后,这是最终工作的代码(感谢 Robyn Overstreet)

  <?php
  $previousPage = parse_url($_SERVER['HTTP_REFERER'], PHP_URL_HOST);
  $url = site_url();
  $url = preg_replace('#^https?://#', '', $url);

  if ($previousPage == $url){ ?>
     <a href="javascript:history.back();" class="secondaryBtn">
        <div class="inner vAlign">
           <span class="text">BACK</span>
        </div>
     </a>

  <?php } else { ?>
     <a href="/care-ministries/" class="secondaryBtn">
        <div class="inner vAlign">
           <span class="text">Close</span>
        </div>
     </a>
  <?php } ?>

此外,我在这里找到了修复 URL(并使其匹配)所需的位:https://stackoverflow.com/a/9549893/4842348

最后,我应该注意到我的“if”语句 href 指向了网站主页(呃,这就是它被告知要做的事情)——所以我换了一个基本的 JS history.back()——这行得通很好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-06
    • 1970-01-01
    • 2013-04-11
    • 1970-01-01
    • 2013-04-08
    相关资源
    最近更新 更多