Прежде всего, если есть лучший способ, я открыт для предложений.
Мне разрешено изменять внешний интерфейс, но не внутренний (код CMS).У каждой подстраницы сайта есть изображение, которое загружается вверху страницы, просто под панелью навигации (после header.php).Я могу выбрать изображение в CMS, и его путь сохраняется в базе данных.
Итак, скажем, изображение (1920x1080) называется «image.jpg».Мне нужно загрузить изображение с измененным размером (640x360), которое я обычно называю «image.mob.jpg» (и хранится в том же месте на сервере, что и оригинальный «image.jpg»), когда изображение загружается на мобильное устройство (на самом деле, когдаширина экрана меньше или равна 640px - я выбрал число, возможно, было бы лучше использовать 480px или 360px).
Что я сейчас делаю
HTML
<body>
...
<?php
...
while ($row = mysqli_fetch_array($result)) {
if (isset($_SESSION['screen_width']) && ($_SESSION['screen_width'] <= 640)) {
// change "path/to/image.jpg" to "path/to/image.mob.jpg"
$row['image'] = substr($row['image'], 0, -4).".mob".substr($row['image'], -4);
} ?>
<div class="image" style="background-image: url('<?=$row['image']?>)"> ... </div>
...
<?php
if (isset($_SESSION['screen_width']) AND isset($_SESSION['screen_height'])) {
// echo 'Screen width: ' . $_SESSION['screen_width'];
} else if (isset($_REQUEST['width'])) {
$_SESSION['screen_width'] = $_REQUEST['width'];
header('Location: ' . $_SERVER['PHP_SELF']);
} else {
echo '<script type="text/javascript">window.location.href = window.location.href+"?width="+screen.width;</script>';
}
// echo $_SESSION['screen_width'] = "<script>document.write(screen.width)</script>"; ?>
</body>
Это несколько упрощено, но в основном так и происходит.При первом посещении ширина не сохраняется в $_SESSION
, поэтому он загружает большой файл «image.jpg».Но прежде чем он действительно загрузит его, он уже выполняет javascript и перезагружает страницу с $_GET
переменной шириной в URL.Все посещения, кроме первого, уже имеют ширину, сохраненную в сеансе, поэтому URL всегда снова оптимизирован для SEO.Кроме того, путь к изображению переименовывается, и сайт загружает файл «image.mob.jpg», если ширина экрана не более 640 пикселей.
Это прекрасно работает.
Проблема в том, что мне нужны все URL сайтаSEO всегда дружественен, поэтому запрещается иметь его "https://seo -friendly.url? = Width = {screen.width}", даже если только один раз.
Как вы можете видеть в последней закомментированной строке, я также пытался использовать echo $_SESSION['screen_width'] = "<script>document.write(screen.width)</script>";
, но, очевидно, он не работает при загрузке первой страницы, поскольку весь PHP выполняется перед любым JavaScript.
Как мне решить эту проблему с AJAX(Мне нужен весь код, потому что я тупой, чтобы понять ответы других в Интернете вздох ) или, если есть какая-либо лучшая альтернатива.
Заранее спасибо.