Почти наверняка проблема в том, что аватарки закачивались на одном домене, а сейчас отображаются на другом. По этой причине авторесайз не работает, т.к. движок не может конвертировать URL в локальный путь на диске.
В последней стабильной версии 1.0.6 это делается примерно так:
$iPhotoId = $oTopic->getPhotosetMainPhotoId();
$aPhotos = $oTopic->getPhotosetPhotos($iPhotoId, 1);
if (isset($aPhotos[$iPhotoId])) {
$oPhoto = $aPhotos[$iPhotoId];
// Здесь в $oPhoto оно и есть
}
В текущей разрабатываемой версии 1.0.7 так:
$oPhoto = $oTopic->getPhotosetMainPhoto();
В обоих случаях в результате в переменной $oPhoto получим фотографию, отмеченную как превью, в виде объекта ModuleTopic_EntityTopicPhoto. И получить ссылку на само изображение можно методом getUrl():
Да, есть такая проблема — хранение в базе полного пути к изображению. Поэтому при переезде возникают такие проблемы. Будем избавляться в будущих версиях
В том-то и дело. Ошибка, похоже, возникает из-за синтаксиса именованного субпаттерна (?<name>). Надо попробовать заменить на старый синтаксис (?P<name>). Если я правильно понял, то проблема должна решиться
Удивительного нет, в следующий раз, когда будут обрабатываться CSS, ошибка может вернуться. Напр., если очистить /_run/assets/. Поэтому лучше бы, конечно, попробовать разобраться. Но я не могу эту ошибку воспроизвести у себя
К вышесказанному добавлю, что можно формировать меню не только руками, можно автоматически заполнять его блогами или категориями (если соответствующий плагин активирован). Для этого в параметрах меню есть такой параметр, как config. Вот как он работает:
В меню будет выведен список блогов, отсортированных по рейтингу, т.е. будет название блога и ссылка на него. Параметр limit, как можно догадаться, задает, сколько ссылок будет в меню.
В меню будет выведен заданный список блогов. А если задать 'fill_from' => 'categories' или 'fill_from' => array('categories' => array(...)), то в меню будут выведены категории. Но самое интересное то, что можно комбинировать источники вывода в меню. Вот пример:
Здесь в меню сначала попадут два пункта из списка, который задан параметром items, потом два пункта — это категории 'events' и 'news', а потом — блоги. И т.к. список блогов явно не задан, но зато задан лимит (всего 7 пунктов в меню), то в него попадут три топ-блога по рейтингу.
В принципе, уже сейчас можно, при желании, весь шаблон, используемый на сайте, перенести в /app/. Надо только не забыть пути поменять в конфиге, чтоб Viewer знал, откуда брать шаблон.
Но вообще, если вносятся изменения в шаблон, он как-то подпиливается под свой сайт, то лучше всего это делать с помощью создания новой темы шаблона:
1) В папке common/templates/skin/experience/themes/ создать новую подпапку с названием своей темы (напр., mytheme)
2) Скопировать туда содержимое common/templates/skin/experience/themes/default/ и задать тему mytheme в настройках шаблона
3) После этого уже можно вносить свои изменения в свою тему
Теперь, если будешь поверх шаблона common/templates/skin/experience/ накатывать обновление (НЕ УДАЛЯЯ старую папку, а прямо сразу в нее копировать с замещением старых файлов новыми), то твое тема шаблона сохранится.
А чтоб настройки шаблона не удалялись при этом, забываем про /app/.
Т.е. проблема решаема довольно просто уже сейчас. Но в целом ход твоих мыслей поддерживаю, и в дальнейших версиях значение папки /app/
Если просто КОПИРОВАТЬ, то старые файлы заменяются новыми с тем же именем, если среди старых файлов есть такие, которых нет в новых, то они остаются, как есть.
Вот за это — премного благодарен! Думаю, не будешь возражать, если утащу все это в реализацию?
Что касается перегенерации статей, то писать надо, конечно, специально код под это дело. Проще всего плагин на коленке накидать, который выполнит перебор всех статей и каждую обработает:
// берем статью
$oTopic = $this->Topic_GetTopicById($sTopicId);
// парсим еще раз основной текст...
$oTopic->setText($this->Text_Parser($oTopic->getText()));
// ...и короткий текст
$oTopic->setTextShort($this->Text_Parser($oTopic->getTextShort()));
// и сохраняем топик
$this->Topic_UpdateTopic($oTopic);
И, нельзя ли сделать так, что бы удалялись и их топики?
При удалении пользователя удаляются и все его топики. Но важно понимать — это будет не дополнение к старой версии, это будет новая версия движка. Поэтому, чтоб использовать эту функцию, придется обновиться
На 0.9.6 не пробовал (нет развернутой версии), но на 0.9.7 он у меня запустился. Только не через админку этот плагин надо активировать, а прямо в файле /plugins/plugins.dat прописать руками. Обновляться все равно надо, но как временный вариант должно помочь.
И еще — ботов, которые уже зарегались, надо через админку банить или удалять обязательно, если только их топики удалять, то они будут продолжать со своих зареганных аккаунтов постить все новые и новые топики, это проверено.
Если очень много зареганных ботов и нет времени всех банить, то можно такой еще вариант использовать: в конфиг-файле config.local.php найти параметр $config['security']['salt_pass'] и изменить его значение. На любое, достаточно буквально один символ изменить. И все пароли всех юзеров моментально устареют. Живым юзерам это не страшно — есть восстановление пароля (им можно объяснить, зачем это нужно, поймут), а боты проходить процедуру восстановления пароля не могут
Есть два варианта решения:
1) В базе изменить пути к аватарам, как это описано здесь: altocms.ru/628.html#comment11661
2) В CSS добавить к аватаре max-width и max-height
В текущей разрабатываемой версии 1.0.7 так:
В обоих случаях в результате в переменной $oPhoto получим фотографию, отмеченную как превью, в виде объекта ModuleTopic_EntityTopicPhoto. И получить ссылку на само изображение можно методом getUrl():
и т.д.
Либо, если поставить плагин TopicIntro, то можно еще проще:
Попробуйте код заменить на такой:
Какая версия PHP?
Я это поначалу воспринял, как утверждение )))
В меню будет выведен список блогов, отсортированных по рейтингу, т.е. будет название блога и ссылка на него. Параметр limit, как можно догадаться, задает, сколько ссылок будет в меню.
В меню будет выведен заданный список блогов. А если задать 'fill_from' => 'categories' или 'fill_from' => array('categories' => array(...)), то в меню будут выведены категории. Но самое интересное то, что можно комбинировать источники вывода в меню. Вот пример:
Здесь в меню сначала попадут два пункта из списка, который задан параметром items, потом два пункта — это категории 'events' и 'news', а потом — блоги. И т.к. список блогов явно не задан, но зато задан лимит (всего 7 пунктов в меню), то в него попадут три топ-блога по рейтингу.
Но вообще, если вносятся изменения в шаблон, он как-то подпиливается под свой сайт, то лучше всего это делать с помощью создания новой темы шаблона:
1) В папке common/templates/skin/experience/themes/ создать новую подпапку с названием своей темы (напр., mytheme)
2) Скопировать туда содержимое common/templates/skin/experience/themes/default/ и задать тему mytheme в настройках шаблона
3) После этого уже можно вносить свои изменения в свою тему
Теперь, если будешь поверх шаблона common/templates/skin/experience/ накатывать обновление (НЕ УДАЛЯЯ старую папку, а прямо сразу в нее копировать с замещением старых файлов новыми), то твое тема шаблона сохранится.
А чтоб настройки шаблона не удалялись при этом, забываем про /app/.
Т.е. проблема решаема довольно просто уже сейчас. Но в целом ход твоих мыслей поддерживаю, и в дальнейших версиях значение папки /app/
Что касается перегенерации статей, то писать надо, конечно, специально код под это дело. Проще всего плагин на коленке накидать, который выполнит перебор всех статей и каждую обработает:
При удалении пользователя удаляются и все его топики. Но важно понимать — это будет не дополнение к старой версии, это будет новая версия движка. Поэтому, чтоб использовать эту функцию, придется обновиться
Попробуйте поставить этот плагин: altocms.ru/uploads/files/antibot_103.zip
На 0.9.6 не пробовал (нет развернутой версии), но на 0.9.7 он у меня запустился. Только не через админку этот плагин надо активировать, а прямо в файле /plugins/plugins.dat прописать руками. Обновляться все равно надо, но как временный вариант должно помочь.
И еще — ботов, которые уже зарегались, надо через админку банить или удалять обязательно, если только их топики удалять, то они будут продолжать со своих зареганных аккаунтов постить все новые и новые топики, это проверено.
Если очень много зареганных ботов и нет времени всех банить, то можно такой еще вариант использовать: в конфиг-файле config.local.php найти параметр $config['security']['salt_pass'] и изменить его значение. На любое, достаточно буквально один символ изменить. И все пароли всех юзеров моментально устареют. Живым юзерам это не страшно — есть восстановление пароля (им можно объяснить, зачем это нужно, поймут), а боты проходить процедуру восстановления пароля не могут