Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #21 (permalink)  
Старый 18.09.2018, 20:36
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Nexus
Для обработчика ошибок или самого сервера.
Это не фатальная ошибка, чтобы заморачиваться таким образом. Такие мелочи нужно писать в лог и отдавать страницу без баннера. Да и трудно представить, чтобы директория имела свойство пропадать. )

Сообщение от Nexus
Так, пожалуй, проще для пользователя, который будет использовать этот код
Это не проще, это сложнее там, где совсем не нужно. Зачем клиент, если сервер извлекает номер из куки, а далее достаточно сразу поместить выбранный баннер в вывод в нужное место - include(path).

Зачем усложнять

Последний раз редактировалось laimas, 18.09.2018 в 20:41.
Ответить с цитированием
  #22 (permalink)  
Старый 18.09.2018, 20:52
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,791

Сообщение от laimas
Такие мелочи нужно писать в лог и отдавать страницу без баннера
Так информация о не перехваченном исключении будет записана в лог, а клиент получит status code отличный от 200, т.е. не отрисует баннер.
Сообщение от laimas
Да и трудно представить, чтобы директория имела свойство пропадать
Спору нет, однако совсем не трудно представить изначальное отсутствие директории.
Сообщение от laimas
далее достаточно сразу поместить выбранный баннер в вывод в нужное место - include(path)
А перезаписать в куку? Посреди тела страницы её не запишешь.
Ответить с цитированием
  #23 (permalink)  
Старый 18.09.2018, 21:10
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Nexus
однако совсем не трудно представить изначальное отсутствие директории
И что для этого нужно бросать исключение? Отлаживают скрипты прежде чем помещают на сервер. Это надуманная проблема, а если есть, то однажды заметив решается раз и навсегда.

Сообщение от Nexus
А перезаписать в куку? Посреди тела страницы её не запишешь.
И что этому мешает? Считали, изменили, установили, какие проблемы?

Не нужен тут JS вообще.
Ответить с цитированием
  #24 (permalink)  
Старый 18.09.2018, 21:30
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,791

Сообщение от laimas
Отлаживают скрипты прежде чем помещают на сервер.
Это в идеале В большинстве случае copy-paste и новый коммент: "Не работает".

Сообщение от laimas
И что этому мешает?
В смысле? Куки передаются в заголовках страницы, не в контенте.
Ответить с цитированием
  #25 (permalink)  
Старый 19.09.2018, 05:20
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Nexus
Куки передаются в заголовках страницы, не в контенте.
И что? Динамические страницы тем и отличаются от статических, что их содержание во многом определяется запросами клиента. А это означает, что серверный код, это "солянка" в чистом виде - много кода и представления. И если запрос к индексному файлу, то в итоге это это может быть сборкой множества различных файлов. При этом нет никаких проблем стартовать сессию, передать заголовки, включая и куки, как первичный ингредиент солянки, а все остальное потом.

Определили изначально переменную $banner равную null. Определились с куками, получили запрашиваемый баннер, присвоив его переменной $banner. А далее где-то уже в представление вывод ее. Будет null (не удалось получить банннер из-за ошибок, да и бог с ним, это не причина выбрасывать исключения), значит на странице его не будет, иначе нарисуется.

И как бы там не упрощалось у разработчика, стоит один раз увидеть что нет, один раз придется и проверить, и навсегда исправить. Такие ошибки исправляются на раз-два.
Ответить с цитированием
  #26 (permalink)  
Старый 19.09.2018, 07:42
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,791

laimas, в этом случае код нужно будет разбить на 2 части и объяснить тс, что обновление кукисов должно происходить до передачи самой страницы.
Ответить с цитированием
  #27 (permalink)  
Старый 19.09.2018, 08:27
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Nexus
в этом случае код нужно будет разбить на 2 части
Зачем? Вы же не пишите в своем JS, что нужно дождаться загрузки документа, обработав событие onload или же поместить JS после соответствующего html кода. Вы это как само собой подразумеваете и вас это нисколько не удивляется ибо это есть логика.

Так что вам мешает писать такую же логику для сервера, там ведь тоже самое только наоборот - все что прежде вывода нужно делать до вывода.

<?php
старт сессии, передача заголовков, работа с куками,
обработка ajax запросов с выходом, обработка перенаправлений на себя, и т.п., и т.д.
?>
<html>
вывод, и не возбраняется выполнять иной код
</htm>

Что тут сложного в понимании? В любом случае даже для средней по условиям отображения страницы не избежать различных подключений и прочего кода, так как можно написать все одной портянкой, но сопровождать такой код очень сложно.
Ответить с цитированием
  #28 (permalink)  
Старый 19.09.2018, 09:05
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,791

laimas, ну так у вас все равно будет разбитие на 2 части.
Первая: до вывода контента страницы;
Вторая: в представлении.


<?php

$directory=__DIR__.'/banners/';
$banner='';
if(is_dir($directory)){
    $visit=isset($_COOKIE['visit'])?(int)$_COOKIE['visit']:0;
    $banners=array_diff(scandir($directory),['.','..']);
    $response=$directory.$banners[$visit%count($banners)];
    $banner=file_get_contents($response);
    setcookie('visit',++$visit,time()+365*24*3600,'/');
};

?><html>
<?php echo $banner; ?>
</html>
Ответить с цитированием
  #29 (permalink)  
Старый 19.09.2018, 10:21
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

На какие части? Это все один файл, а каждая его часть, это его логический блок. Вы же раздолбали код действительно на на две части между сервером и клиентом, считая при этом, что это куда понятнее.

Да и написано у вас ...

<?
$visit = $_COOKIE['visit'] ?: 0;
$banner = glob($dir)[$visit];
setcookie('visit', ++$visit, не слишком ли до ... ? ), '/');
//и прочий код который обязательно всегда будет
?>
<html>
<head>
<?=$var?> и прочий вывод определенных значений
</head>
<body>
как и в нужном месте где-то
<div class="banner">
<?
if($banner) include '$banner';
?></div>
</html>


Это логика одного файла, а по уму ее разделяют на код и представление (шаблонизаторы).
Ответить с цитированием
  #30 (permalink)  
Старый 19.09.2018, 10:37
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,791

Сообщение от laimas
На какие части? Это все один файл
Это печально, если все действительно будет в одном файле )
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при обработке данных TBUCTEP Общие вопросы Javascript 11 12.05.2017 14:56
Простой скрипт выбора из базы данных. Atridies Элементы интерфейса 31 14.02.2016 12:49
Не понимаю JavaScript. Как сделать ожидание события загрузки данных? xintrea AJAX и COMET 7 01.06.2013 17:18
Баг при просчете данных в простой html-таблице Vargentum jQuery 1 03.05.2013 13:08
Двойная Фильтрация данных таблицы David0707 Общие вопросы Javascript 0 19.03.2012 13:00