Непонятки с фотографиями

ЕСТЬ РЕШЕНИЕ

Самопроизвольно изменяется дата добавления фото

#1 11 апреля 2013 в 00:25
Версия 1.10.1 С недавнего времени заметил, что админка мне показывает, что ежедневно добавляется порядка 30 фотографий, а модуль "Фотографии" отображает все те же фотографии, но с сегодняшней датой или с датой добавления на несколько дней раньше текущей, хотя фото были добавлены еще в прошлом году. О чем говорят комментарии.

Начал копать. фото нашел в таблице cms_photo_files и обнаружил, что в этой таблице меняется поле pubdate. Попробовал найти кусок кода, который меняет поле pubdate в таблице cms_photo_files но не нашел.

У меня одного такие чудеса или кто-то еще наблюдал подобное?
#2 11 апреля 2013 в 00:39
Dimson, что устанавливали?
#3 11 апреля 2013 в 00:46


Dimson, что устанавливали?

Марат

Тоже подумал, что поставил что-то вредное😊Сейчас заметил следующее. Просматриваю альбом. Под фоткой дата, допустим 1 апреля текущего года. Жмякаю на фото или на ссылку под фото и попадаю на страницу с фоткой. Обновляю страницу браузера и алеееееее оп! Количество просотров увеличилось на единицу, а дата принимает текущее значение. Это баг или что-то все-таки у меня?!
#4 12 апреля 2013 в 10:27
а ларчик открывался просто:
в таблице cms_photo_files поле `pubdate` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

таким образом при увеличении счетчика просмотров происходит обновление поля pubdate

Посмотрел дистрибутив 1.10.1 там в sqldumpemty.sql то же самое. Так что такое не только у меня, но все почему то молчат
#5 12 апреля 2013 в 12:24
Dimson,

Посмотрел дистрибутив 1.10.1 там в sqldumpemty.sql то же самое. Так что такое не только у меня, но все почему то молчат

Не подтверждаю. Два хостинга, платный и бесплатный тестовая площадка. В общих альбомах такого не наблюдается. Как были даты публикации прошлогодние, так и остались. Тоже самое и в собственных альбомах. Система 1.10.1, шаблон дефолтный. Да, параметр ON UPDATE изменяет таймштамп только после редактирования, то есть перезаписи строки таблицы, но не при чтении из нее. Так что там все правильно, ищите у себя проблему, либо в шаблоне, либо на хостинге, либо в дополнениях.
Если есть желание, то вот тестовая площадка — xnix.tw1.ru
#6 12 апреля 2013 в 12:40
в frontend.php компонента есть функция, которая увеличивает счетчик просмотров у меня это 155-я строка

// Обновляем количество просмотров фотографии
if(!$is_author){
$inDB->setFlag('cms_photo_files', $photo['id'], 'hits', $photo['hits']+1);
}

а вот сама функция

public function setFlag($table, $id, $flag, $value) {
$this->query("UPDATE {$table} SET {$flag} = '{$value}' WHERE id='{$id}'");
return true;
}

Что мы тут видим? Правильно Update таблицы
alter table cms_photo_files MODIFY `pubdate` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP — решило проблему
#7 12 апреля 2013 в 12:58
Да и еще… При просмотре своих фоток счетчик не срабатывает, соответственно дата не изменяется.
#8 12 апреля 2013 в 13:21
Так апдейт-то там в этой функции идет не по всей строке, а только одного поля. Вы смотрели мою тестовую площадку, нашли там такой глюк? Если там тоже такой глюк вдруг найдете, значит ищите в своем браузере. Где-то что-то по автомату изменяет как-то (хотя это конечно бред). Ну на двух площадках проверял, нету ничего подобного. Сейчас еще на третьей проверил, на байетхосте и тоже все в норме. Три разных хостинга, на двух PHP 5.2, на одном 5.3, сейчас еще на одном с 5.3 проверю. Ищите что меняли где. На всех площадках хаки у меня минимальные, только в шаблонах, там для закладок чуток, и еще мелочи, в коде хаков не сделано, но полно плагинов, модулей и компонентов сторонних и пока ничего не мешает. А может у вас там шелл какой завелся?
Да, чуть не забыл, на всякий случай проверьте параметры MySQL-сервера и настройки базы. Где-то там вроде что-то подобное было, обновлять по времени доступа что ли, точнее не помню.
#9 12 апреля 2013 в 14:03
Насколько мне известно, то этот "триггер" срабатывает при обновлении значения любого поля в записи. Разве нет? Я считаю, что в данном случае будет неправильным скидывать значение поля даты публикации фото в текущее значение времени при любых раскладах. За исключением вставки новой записи. Во всяком случае мне этого не надо. Сейчас все работает нормально
#10 12 апреля 2013 в 14:44
Послушайте, вы задали вопрос в общем русле, я вам дал такие же самые общие ответы. Что у вас за хостинг, или это денвер? Какие версии PHP, MySQL. Хостинг на винде или на *Nix? Все это необходимо указывать при таких вопросах. Теперь что касается вопроса: Еще раз перепроверил теперь уже на 5 хостингах: Платный Плюсвеб, бесплатные — таймвеб, байетхост, хостингер, 2х4. Все с разными версиями PHP и нигде не смог повторить вашу ошибку. Если код вы не меняли, то у меня он точно такой же из дистрибутива Instant 1.10.1. И надо же, работает на ура без этих ошибок. Значит дело не в коде, код написан правильно и аккуратно. Ошибка где-то у вас, поэтому тригер или нет, там все правильно. Обновление таблицы срабатывает при обновлении любого поля, это точно, только в записи обновляется фактически только это поле, если в настройках не стоит параметр обновлять с редактированием и дату публикации, но при простом просмотре или обновлении другого поля, как "хит", если в настройках не включено обновление публикации, не должно обновляться ничего, кроме поля хитов. Опять же подсказка, смотрите настройки именно базы или MySQL-сервера. Если кто-то еще сможет повторить вашу ошибку, или увидеть ее на своих ресурсах, то обязательно сообщит. В данном случае я ее ни увидеть не смог, ни повторить. Опять же 5! разных хостингов с разными версиями PHP и подверсиями MySQL, с официального дистрибутива без хаков в коде системы (только некоторые добавки в шаблоне и файле стилей шаблона. Не надо грешить на код.

Я считаю, что в данном случае будет неправильным скидывать значение поля даты публикации фото в текущее значение времени при любых раскладах.

Если в коде PHP это явно не прописано, значит смотрите именно настройки базы и параметры MySQL-сервера. А в коде системы такое можете найти, вроде, только для блогов если в настройках соответствующего компонента это указано. Возможно вы используете какой-то хак или дополнение, которые позволяют вставлять в посты или статьи фотографии из альбомов, в этом случае смотрите эти хаки или дополнения. В самом коде системы, та функция, на которую ссылаетесь, работает без ваших ошибок.
#11 12 апреля 2013 в 14:55
Anabiotick
У вас в таблице cms_photo_files поле `pubdate` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, ???

или все-таки без ON UPDATE CURRENT_TIMESTAMP?? Может это каким-то случайным образом ко мне попало. Не знаю.

Я исправил это поле, после чего счетчик увеличивается, а дата остается прежней. Если бы у меня был какой-то другой код, меняющий дату, то это бы мне не помогло.

Возможно что-то и в настройках… но я не понимаю эту логику. Зачем присваивать полю pubdate текущее состояние даты при его явном изменении. Зачем его вообще менять после присвоения значения?
#12 12 апреля 2013 в 15:13

У вас в таблице cms_photo_files поле `pubdate` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, ???

Если честно, не смотрел, в каком файле и какой строке? Посмотрю и скажу.

Я исправил это поле, после чего счетчик увеличивается, а дата остается прежней

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

Возможно что-то и в настройках… но я не понимаю эту логику.

В настройках системы это только для постов блогов. Некоторые блогеры практикуют обновления своих постов и им выгодно делать так, чтобы обновлялась и дата публикации, чтобы пост снова всплыл наверх. Это нормально, в особенности, когда пост применяется для обсуждения чего-либо или предусматривает, что в него будут вносится нужные обновления, например, здесь на сайте это некоторые применяют для обновления своих разработок, во всяком случае применяли. например, кто-то сделал плагин для 1.9, за ним прошло много других постов, а после была переделка для 1.10, если это простая переделка, то есть ли необходимость создавать новый пост, когда можно просто обновить старый? Правда такая возможность управляется пока только из админки, но в будущих версиях, возможно что-то изменится.
Но в параметрах сервера и настройках базы нерадивый хостер иногда такие вещи может упустить и там будет стоять это самое обновление и тогда никакой код PHP это не обойдет. Что у вас за хостинг?
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.