• avatar paic
  • 0
В папке assets/cache/images не создаются категории, которые есть в папке assets/images, а все картинки в папку кэш сохраняются скопом.
  • avatar webber
  • 0
Не ставил, но судя по коду phpthumb ничего вроде не должно поменяться в этом плане. Если поменялось — то наверно это баг и об этом надо написать либо тут отдельной темой либо тут
  • avatar paic
  • 0
Не совсем понял про кэш. Если картинки режутся phpthumb, то картинки из папки assets/images/property/id/ складируются в папку assets/cache/images/property/id/ — т.е. пути известны :)
Так и было раньше. А новая версия 1.4.6 — все скопом (( Посмотрите, плз, как у Вас именно в этой версии, если уже ставили.
  • avatar webber
  • 0
Не совсем понял про кэш. Если картинки режутся phpthumb, то картинки из папки assets/images/property/id/ складируются в папку assets/cache/images/property/id/ — т.е. пути известны :) Имена немного модифицируются — т.е. вместо picture.jpg становится что-то picture-размер-доп.парам.jpg — т.е. фактически с помощью glob(«picture*.jpg») можно получить массив обрезков этой картинки всех размеров и удалить их.
Ну или я не совсем понял проблему поиска кэша :)

Глянул приведенное решение — оно не удаляет кэшированные обрезки, а также может удалить лишние :)
  • avatar paic
  • 0
С TV сложнее и зависит от того, где хранятся картинки. Если они изначально тоже хранятся в папках, зависящих от id документа, то удалить эти две папки (оригиналов и кэшей) совершенно не сложно.
да, именно так и сделано, по типу как в SimpleGallery, только в папке images/property/id. Но в папке кэш все картинки хранятся скопом, без разбиения по папочкам, даже если они есть в папке images((
Когда у меня была похожая задача с целью очистки диска, я просто писал отдельный сниппет, который собирал все картинки из папок в базу и сверял с записями tv — удалял несуществующие иногда по крону, для очистки места на диске :)
Я вот тоже смотрю в сторону этого решения и чистить по необходимости. Но пока не тестировал. Хотя, конечно, лучше изначально не доводить до такого состояния.
  • avatar webber
  • 1
Да нет там никакой особой задачки. SimpleGallery раскидывает свои картинки в пронумерованные по id документа папки, кэш — аналогично. Так что при удалении документа легко проверить наличие этих двух папок и удалить.
С TV сложнее и зависит от того, где хранятся картинки. Если они изначально тоже хранятся в папках, зависящих от id документа, то удалить эти две папки (оригиналов и кэшей) совершенно не сложно. А вот если эти картинки просто разбросаны по другим папкам (например по id пользователя) — то соответственно мы можем получить путь только текущей картинки (ну и ее кэш найти функцией glob, зная имя и часть пути кэша). В этом случае (картинки хранятся в папке пользователя) неиспользуемые можно найти разве что перебором: берем все картинки из папки, берем все картинки всех объявлений пользователя из TV и сравниваем — если в тв нет — удаляем.

Ну а если картинки просто разбросаны по произвольным папкам — то тут уж при удалении объявления неиспользуемые мы и не найдем, т.к. следов не осталось, а перебирать все картинки базы и все картинки во всех папках каждый раз — не очень хорошая идея. Когда у меня была похожая задача с целью очистки диска, я просто писал отдельный сниппет, который собирал все картинки из папок в базу и сверял с записями tv — удалял несуществующие иногда по крону, для очистки места на диске :)
  • avatar paic
  • 0
Спасибо! И точно (спасибо за подсказку) еще же и кэш есть, а еще и thumb вдогонку(((

А еще есть и неиспользованные картинки. Например, при размещении объявления веб-пользователь загрузил одну картинку, а потом он ее еще 3 раза менял — итого: прикрепленная одна (возьму ее из ТВ), а еще 3 лишних просто висят и их адресов нигде не осталось. Одно хорошо — они в одной папке хранятся вместе с прикрепленной (сделал по id, как в SimpleGallery), наверное, можно целиком всю папку удалять, но останутся былые кэш и тумбочки.

Да уж, задачка…
  • avatar webber
  • 1
Перед удалением tv взять с них адреса картинок, удалить их оригиналы (адрес брать из тв) и кэшированные обрезки (если есть, найти с помощью функции glob зная часть адреса и имя) — unlink ($filename). Аналогично — для галереи. А только потом уже удалять сами записи tv и в последнюю очередь — объявления.

Удаление картинок проще вынести в отдельный сниппет, передавая туда, например id ресурса и id tv с картинкой. В этом случае его можно будет использовать однотипно везде — и в плагинах и в других сниппетах, вроде prepare для formlister.
  • avatar Dmi3yy
  • 0
А этот тв у вас во вкладке сео
Где они сортируются так как заняты в ммрулес
Странное поведение, при редактировании документа.
Я создал последним параметр sitemap_exclude и у него самый большой id и не задан порядок в списке. Почему-то он вылез поcередине остальных TV, я ему задал порядок в списке, например, 199, но ничего не изменилось, пока я не внес и не удалил его из категории Content. После этого он стал показываться внизу списка… К сожалению, не заскринил.

Очень странно. Остальные TV у документа лежат в разных категориях, сортируются, я так понимаю, по ID, группировки и вкладки не используются.
  • avatar paic
  • 0
В общем, по модулю пока ничего не делал, может и не буду. Но некоторые подвижки получились.
1. Удаление пользователя в личном кабинете (когда он сам себя удаляет) сделал так
[!FormLister?
&formid=`delete`
&controller=`DeleteUser`
&prepareAfterProcess=`delete_prepare`
&rules=`{
"password":{
	"required":"Обязательно введите пароль"
}
}`
&formTpl=`@CODE:[+form.messages+]
		<div class="row">
			<form method="post">
				<input type="hidden" name="formid" value="delete">
					<div class="col-md-12 col-sm-12">
						<div class="form-group">
							<input type="password" class="form-control" id="password" placeholder="Пароль" name="password" value="">
						[+password.error+]
						</div>
					</div>
					<div class="col-md-12 col-sm-12">
                                            <button class="btn btn-default">Удалить профиль <i class="fa fa-user-times"></i></button>
					    <button type="button" onclick="history.back();" class="btn btn-default orang">Отменить <i class="fa fa-reply"></i></button>
                                     </div>
				</form>
			 </div>`
&messagesOuterTpl=`@CODE:<div class="col-md-12 col-sm-12 col-xs-12 alert alert-danger" role="alert">[+messages+]</div>`
&errorTpl=`@CODE:<span class="error">[+message+]</span>`
&redirectTo=`1`
&to=`[(emailsender)]`
&subject=`Пользователь удален`
&reportTpl=`@CODE:
<p>Имя: [+username.value+]</p>
<p>Имя: [+fullname.value+]</p>
<p>Телефон: [+phone.value+]</p>
<p>Email: <a href="mailto:[+email.value+]">[+email.value+]</a></p>
<p>id объявления: [+id.value+]</p>`
!]

и сниппет delete_prepare
<?php
global $modx, $table_prefix;
$table = $modx->getFullTableName('site_tmplvar_contentvalues');
$table2 = $modx->getFullTableName('site_content');
//получаем id веб-пользователя
$user = $modx->getLoginUserId('web');
// получаем список id объявлений веб-пользователя
$res = $modx->db->select("contentid", $table, "tmplvarid='7' AND value='".$user."'");
$ids_user = '';
while ($row=$modx->db->getRow($res)) {
    $ids[] = $row['contentid'];
        $ids_user = implode(',', $ids);
}
// удаляем все его объявления
	$modx->db->delete($table2, "id IN ($ids_user)");
// удаляем TV этих объявлений
	$modx->db->delete($table, "contentid IN ($ids_user)");

где tmplvarid=7 — это ТВ параметр, в котором прописан aid автора объявления,
prepareAfterProcess — чтобы сниппет запускался после успешного удаления веб-пользователя.

2. Аналогично — в админке, когда веб-пользователя удаляет администратор сайта, через плагин (надоумил d-fm1301 , за что ему спасибо).
3. При блокировании веб-пользователя администратором сайта — тоже плагин, который отменяет публикацию всех объявлений блокируемого веб-пользователя, поэтому DL тревожить не пришлось, он неопубликованные документы и так не выводит.

Но попутно возник другой вопрос — а как быть с картинками от этих объявлений? Страницу удалил, тв-шки тоже, а картинки остались((((

Подскажите, как удалить картинки из папки images и из папки galleries (на удаляемых страницах есть фотогалерея SimpleGallery) одновременно с удалением страниц, к которым они прикреплены?

Спасибо.
  • avatar paic
  • 0
Переходите на FormLister, я здесь попытался собрать в одно место все что было полезного по этому вопросу, немножко своего добавил. возможно и еще добавлю, как закончу. Все равно придется, рано или поздно. Но луче раньше))
  • avatar paic
  • 0
спасибо, накатил сверху — ошибки исчезли, ElementsTree работает, остальное вроде тоже. Откатываться назад не потребовалось.
  • avatar tinik
  • 0
при установке совместно с WebloginPE перестает работать логаут(
  • avatar Dmi3yy
  • 0
В какой части вывода?
Возникла отличная от нуля вероятность того, что поле «Порядок в списке» при редактировании TV больше не выстраивает TV в нужном порядке при редактировании документа. Есть ли возможность проверить? такое ощущение, что переметры начали сортироваться по категории
  • avatar Dmi3yy
  • 1
Логика простая все или тут:
github.com/evolution-cms/evolution
Или тут:
github.com/extras-evolution/

В целом где то с 2.1 или 2.2 будет реорганизация extras и будет логичней чем сейчас

Ибо в планах все дополнения отделить от ядра и подключать в момент инстала так будет логичней поеятней и удобней
  • avatar paic
  • 0
Да я не про баги. И вообще огромный респект за работу, которые Вы и Вся Команда делаете в плане развития движка и сообщества, которое вокруг этого движка сформировалось.
Я про то, что куча версий, в разных местах хранится, и где что последнее допиленное не всегда понятно.

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

Вне всякой логики(((
  • avatar Dmi3yy
  • 0
Сейчас как раз пилим скоро будет 1.4.7 с фиксами всех багов
  • avatar paic
  • 0
Спасибо, а по ссылке в топике — там что лежит?
Очень бы хотелось, чтобы все было в одном месте. А так — день потерян.

И админка все равно не восстановилась, наверное, придется откатываться назад(((