【问题标题】:Image rotation in PHP with link based on device display sizePHP中的图像旋转,带有基于设备显示大小的链接
【发布时间】:2022-01-25 23:32:55
【问题描述】:

我正在寻找基于设备的图像旋转。例如,如果网站在桌面上加载,它应该加载 desktop.png,如果相同的网站在移动设备上加载,它应该加载 mobile.png

我的 JS 代码:

<script type="text/javascript">
    if (screen.width <= 720) {
     document.write('<a href="http://example.com/mobile"><img src="mobile.png"></a>');
    } else {
     document.write('<a href="http://example.com/desktop"><img src="desktop.png"></a>');
    }
</script>

我已将 JS 代码重写为 PHP 代码:

if (get($screen, "width") <= 720.0) {
  echo "<a href=\"http://example.com/mobile\"><img src=\"mobile.png\"></a>";
} else {
  echo "<a href=\"http://example.com/desktop\"><img src=\"desktop.png\"></a>";
}

上述 JavaScript 代码运行良好,但我的 PHP 代码出错。谁能帮忙解决一下?

【问题讨论】:

    标签: javascript php html jquery mobile


    【解决方案1】:

    答案是否定的。您无法使用 php 在 web 上实现图像旋转,因为 php 是一种服务器端语言,并且要在 web 上创建任何 效果,您需要 css(简单效果)或 javascript(复杂效果)

    使用服务器端渲染 (php),您只能使用一种模板或绑定变量在服务器中创建所需的 javascript 标记作为字符串并将其返回给 Web 浏览器。 至少在这一代,你不能在服务器端创建或不存在一种可以替代经典javascript的技术或框架

    ssr : 服务器端渲染

    PHP 是一种用于开发后端程序的服务器语言。从 Web 开发的早期开始,php 和其他语言(java、python、c#、ruby 等)已被用于创建网页。在技​​术上,服务器端负责创建 html,所以当用户进入 acme.com 时,服务器端会创建 html 并将其返回,并准备好显示的内容。

    在这些框架中是经典的使用库,它们能够使用模板创建 html,就好像它是一个简单的字符串一样。

    <? if ($condition): ?>
      <p>Content</p>
    <? elseif ($other_condition): ?>
      <img src="other-content.png" alt=""/>
    <? else: ?>
      <script type="text/javascript">
         document.write('<a><img src="$SOME_VAR.png"></a>');
      </script>
    <? endif; ?>
    

    如您所见,在服务器 (php) 中,您只需将 html 或 javascript 创建为简单的字符串。最终,这些内容会被网页浏览器评估,而网页浏览器只会理解html、javascript、css、字体等。浏览器不会不在乎是谁在服务器中创建了 html/javascript(java、c#、php、python、ruby 等)。

    csr : 客户端渲染

    基本上和ssr相反。内容是在广告客户端创建的,更具体地说是网络浏览器。所以当用户进入 acme.com 时,服务器只返回一个最小的 index.html 和一个大的 javascript 文件。此 javascript 文件负责使用 javascriptajax 呈现或创建整个网页。

    在这一层,技术(javascript)能够访问一些设备信息或资源,如屏幕尺寸、摄像头等。您无法在服务器端获取这些值(php、 java、c#等)

    这里有更多细节

    【讨论】:

    • 是否可以使用 PHP $_GET($screen, "width") 或任何其他方式使用 PHP 获取屏幕尺寸?
    • 没有。屏幕尺寸存在于浏览器端,而不是服务器端。唯一的方法是使用 javascript 这是客户端技术,PHP 是服务器端
    【解决方案2】:

    PHP 对客户端的屏幕大小一无所知。最好的解决方案是基于屏幕大小更改内容的 JavaScript。

    使用&lt;picture&gt; 元素,您可以使用媒体查询根据屏幕尺寸确定要显示的图像。

    在下面的示例中,mobile.png 将针对宽度不超过 720 像素的屏幕显示,desktop.png 图像将针对其上方的所有尺寸显示。

    <a id="dynamic-link" href="">
      <picture>
        <source srcset="mobile.png" media="(max-width: 720px)">
        <img src="desktop.png" alt=""/>
      </picture>
    </a>
    

    锚标签没有这种功能。但是我们可以使用window.matchMedia() 来添加它,并在屏幕尺寸发生变化时使用相同的媒体查询来更改锚点的href 值。

    // Select the link element.
    const dynamicLink = document.getElementById('dynamic-link');
    
    // If the link exists on the page, continue.
    if (dynamicLink !== null) {
      // Observe a media query.
      const mediaQuery = window.matchMedia('(max-width: 720px)');
      mediaQuery.addEventListener('change', event => {
        // If the screen in 720px or less.
        if (event.matches) {
          dynamicLink.href = 'http://example.com/mobile';
        // All sizes above.
        } else {
          dynamicLink.href = 'http://example.com/desktop';
        }
      });
    }
    

    【讨论】:

    • 我们可以在&lt;picture&gt; 标签中包含a href 吗?你能帮我用 PHP 代码进行同样的操作吗?
    • 不,那不是有效的 HTML。尽管您可以将&lt;picture&gt; 标签放在&lt;a&gt; 中。服务器无法读取屏幕尺寸。前端确实非常了解这一点。所以根据屏幕宽度改变前端的内容。
    • &lt;picture&gt; &lt;a href="http://example.com/mobile"&gt;&lt;source srcset="mobile.png" media="(max-width: 720px)"&gt;&lt;/a&gt; &lt;a href="http://example.com/desktop"&gt;&lt;img src="desktop.png" alt=""/&gt;&lt;/a&gt; &lt;/picture&gt; 这行得通吗?
    • 查看我的最新编辑。我添加了一些 JavaScript,它们使用相同的媒体查询来更改链接上 href 属性的值。
    • 需要注意的是这是一个javascript解决方案,而不是PHP
    猜你喜欢
    • 1970-01-01
    • 2011-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-30
    • 2020-07-01
    • 1970-01-01
    • 2012-09-22
    相关资源
    最近更新 更多