Bluetenstadt

Bluetenstadt

Был в сети 30 мая 2018, 11:59
Заказы не принимаю
Олег Сергеевич
Олег Сергеевич
Давно для себя написал инструкцию, чтобы ничего не забыть:

1. Cмотрим и копируем серверные пути с помощью phpinfo()
2. В админке: «Сайт» → «Обновить сайт»
3. В админке: безопасность — перезагрузить все права доступа и очистить кэш
4. В админке: безопасность — завершить все сеансы
5. Скопировать базу
6. Поменять серверные пути и название сайта в БД
7. Залить базу
8. Скопировать файлы со старого хостинга
9. Удалить всё внутри папки core/cache
10. Поменять пути и название сайта в файлах:
/core/config/config.inc.php — доступы к базе, урл и пути
/config.core.php
/connectors/config.core.php
/manager/config.core.php
11. Залить файлы на новый хостинг.

После таких действий — никаких глюков.
Михаил
Михаил
Для 301 с www на без www надо добавить в конфиг:

server{
    listen 80;
    server_name www.modx.kz;
    return      301 http://modx.kz$request_uri;
}

server {
    listen              80;
    server_name         modx.kz;
    root                /var/www/modx-kz/www;
    access_log          /var/log/nginx/modx-kz-access.log;
    error_log           /var/log/nginx/modx-kz-error.log;
    index               index.php;
    rewrite_log         on;
    location /core/ {                                                                                                                                                  $
        deny all;                                                                                                                                                      $
    }
    location / {
        try_files       $uri $uri/ @rewrite;
    }
    location @rewrite {
        rewrite         ^/(.*)$ /index.php?q=$1;
    }
    location ~ \.php$ {
        include         fastcgi_params;
        fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_pass    backend-modx-kz;
    }
    location ~* ^.+\.(jpg|jpeg|gif|css|png|js|ico|bmp)$ {
       access_log       off;
       expires          10d;
       break;
    }
    location ~ /\.ht {
        deny            all;
    }
}
Максим Кузнецов
Максим Кузнецов
Помогу с решением.

Вызываем сниппет Login:
[[!Login? &loginTpl=`fastLoginTpl` &errTpl=`fastLoginError`]]

Чанк формы для авторизации fastLoginTpl:
<div style="display: none;" id="authErrors">[[+errors]]</div>
<form class="loginForm" id="iWannaLogin" action="[[~[[*id]]]]" method="post">
	<div class="login">
		<input id="loginForm" name="username" class="roundInput" type="text" placeholder="Логин" title="Ваш логин">
	</div>
	<div class="password">
		<input id="passwordForm" name="password" class="roundInput" type="password" placeholder="Пароль" title="Ваш пароль">
	</div>
	
	<input class="returnUrl" type="hidden" name="returnUrl" value="[[+request_uri]]" />
	<input class="loginLoginValue" type="hidden" name="service" value="login" />
	
	<div class="submit">
		<a rel="nofollow" href="[[~17]]">Я - тупой, забыл пароль..</a>
		<input id="ajaxLoginButton" type="submit" name="Login" value="Войти" />
	</div>
</form>

Чанк для вывода ошибки fastLoginError:
[[+msg]]

Скрипт js, обрабатывающий событие отправки формы (нужен подключенный jquery):
<script type="text/javascript">
	$(document).ready(function(){
		$("#iWannaLogin").bind("submit", function() {

			$("#authErrors").text("");
		
			//здесь можно допилить подсветку полей с ошибкой
			if ($("#loginForm").val().length < 1 && $("#passwordForm").val().length < 1) {
				$.jGrowl("Введите логин и пароль", {group: "m-Error"});
				return false;
			}
			if ($("#loginForm").val().length < 1) {
				$.jGrowl("Введите логин", {group: "m-Error"});
				return false;
			}
			if ($("#passwordForm").val().length < 1) {
				$.jGrowl("Введите пароль", {group: "m-Error"});
				return false;
			}

			$.ajax({
				type: "POST",
				cache: false,
					url: "[[~[[*id]]]]",
				data: $(this).serializeArray(),
				beforeSend: function(){
					$("#ajaxAuth .closeBlock").css("display", "none");
					$("#ajaxAuth .ajaxLoad").css("display", "block");
					
					$("#ajaxLoginButton").prop("disabled", true);
				},

				success: function(data) {
					$("#ajaxAuth .closeBlock").css("display", "block");
					$("#ajaxAuth .ajaxLoad").css("display", "none");
			
					var errMessage = $(data).find("#authErrors").text();
				
					if(errMessage == ""){
						window.location = "адрес для переадресации при успешной авторизации";
					}
					else{
						$("#authErrors").text(errMessage);
						$.jGrowl($("#authErrors").text(), {group: "m-Error"});
					}
				},
				
				complete: function(){
					$("#ajaxLoginButton").prop("disabled", false);
				}
			});
			return false;
	
		});
	});
</script>

— я еще подключил плагин jgrowl для отправления алертов. В его же вызове group: «m-Error» — класс для всплывающего бокса (красный, с ошибкой).
Если jgrowl не нужен — то вместо него вставляем в поле для ошибок желаемый ответ. Пример:
$("#authErrors").text("текст ошибки").css("display", "block");

#ajaxAuth .ajaxLoad — в моем примере форма с индикатором загрузки, которая появляется при обработке аякс-запроса.
Andrei D.
Andrei D.
Попросили сделать архив не фильтром, а отдельной страницей для каждого года, вот пример выборки мероприятий за 2010 год:

[[!pdoPage?
&element=`getTickets`
&parents=`38`
&includeTVs=`program-start`
&tpl=`program-list-ru`
&where=`["program-start BETWEEN \"2010-01-01\" AND \"2010-12-31\""]`
&sortby=`program-start` &sortdir=`DESC`
]]
Василий Наумкин
Василий Наумкин
Плагин на OnLoadWebDocument.

При запросе проверять дату создания, и если больше 7 дней — удалять или отключать ресурс и отправлять на главную или на 404.
То есть, юзеры сами будут инициировать отключение, cron не нужен.
Denys Butenko
Denys Butenko
Для своих нужд изменял скрипт, сделал, чтобы при бэкапе пропускались директории /site/assets/cache — в которой хранятся phpthumbof кешированные картинки, /site/core/cache — системный кэш, /site/core/package — где хранятся архивы и распакованные пакеты. Размер бэкапа уменьшился на 60%.