Abu

Abu

С нами с 24 декабря 2012; Место в рейтинге пользователей: #89
Лев Вербицкий
12 декабря 2015, 14:19
1
+4
Написать сниппет.
Примерно такой:
$admin = $modx->getObject('modUser', id-админа);
$profile = $admin->getOne('Profile);
return $profile->mobilephone;
Abu
Abu
25 июля 2015, 22:30
1
+1
Может кому окажется полезным, работает просто включив в настройках системы — minifyx_process_images

По умолчанию путь типа такого: /assets/components/minifyx/munee.php?files=/assets/uploads/myimage.jpg?resize=w[200]h[283]s[true]

Немного джаваскрипта поможет обрамить img в ссылку на полное изображение забирая путь из значений в ссылке (files=).
Подключив лайтбокс и jquery, можно сделать ссылки. Например для fancybox:

<script>
$(document).ready(function() {
    $('img[src*="minifyx"]').each(function() {
          var url =  $(this).attr("src");
          var fullurl = url.substring(url.lastIndexOf("files=")+6,url.lastIndexOf("?"));
          $(this).wrap('<a class="fancybox" rel="group" href="' + fullurl + '" />');
       });
    });
$(".fancybox").fancybox();
</script>
Ганин Роман
24 апреля 2015, 22:57
11
+2
Начало разработки — за пределами MODX. Вёрстка (БЭМ) шаблонов, чанков и страниц в Sublime Text 3 с использованием Gulp-задач для автокомпиляции с использованием пре- и постпроцессоров (ускоряют разработку в 4-5 раз), зависимости: bower, для UI-тестов адаптивности: BrowserSync. Минификация стилей и скриптов на клиенте (прекратите вешать эту задачу на MinifyX/сервер!). Кодстайл: CSScomb и JSCS + JSLint. В дальнейшем можно настроить автоматическую выгрузку по SFTP скомпилированных файлов прямо на сервер. Шаблонизация на клиенте легко настраивается с помощью gulp-rigger, gulp-file-include или gulp-include-source. За счет вотчеров скорость просто реактивная. Особенно удобно, если монитора два и больше — в одном мониторе код проекта, в остальных — мгновенный результат (страница обновляется быстрее, чем я успеваю перевести взгляд с одного монитора на другой или переключиться на новый раб. стол).
Инициализация сервера: ansible, установка MODX: Gitify, импорт настроек: Teleport. Импорт уже подготовленных чанков, tpl-ек занимает минуты, нет необходимости заниматься «клавадрочерством» с Ctrl+Tab (переключиться на фронтенд-вкладку), Ctrl/Cmd+R (обновить страницу), чтобы просмотреть результат — всё уже оттестированно на этапе вёрстки. Остаётся только настроить магию сниппетов и оформить Custom Forms. Дальше — оверлокинг с XDebug, debugParser, BloodLine и Chrome DevTools.
Rootiys
08 февраля 2015, 22:08
3
0
Добавь это:
1. Имя: [[+address.receiver]] 
2. Телефон: [[+address.phone]] 
3. Email: [[+user.email]] 
4. Комментарий: [[+address.comment]] 
5. Индекс: [[+address.index]] 
6. Область: [[+address.region]] 
7. Город: [[+address.city]] 
8. Улица: [[+address.street]] 
9. Дом: [[+address.building]] 
10. Квартира: [[+address.room]]
Наумов Алексей
07 ноября 2014, 15:33
4
+4
Плагин с какого то из сайтов:

<?php
switch ($modx->event->name) {
    case 'OnWebPageInit':
        $isMobile = false;
        if(isset($_SERVER["HTTP_USER_AGENT"])) {
            $useragent = $_SERVER['HTTP_USER_AGENT'];
    if(preg_match('/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i',$useragent)||preg_match('/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i',substr($useragent,0,4))) {
                $isMobile = true;
        }
		}
        if ($isMobile) {
            //Устанавливаем ключ для кэша мобильной версии
            $modx->setOption('cache_resource_key', 'resource/mobile');
        }
        //Устанавливаем настроку и плейсхолдер
        //к ней может обратиться при необходимости
        //в сниппетах через $modx->getOption('mobile')
        //или в чанке через [[++mobile]]
        $modx->setOption('mobile', $isMobile);
        $modx->setPlaceholder('+mobile', $isMobile);
        break;
    case 'OnLoadWebDocument':
		$id = $modx->resource->get('id');
		$resource = $modx->getObject('modResource',$id);
		$template = $resource->get('template');
		$tmpVar = $modx->getObject('modTemplate',$template);
		$prop = $tmpVar->get('properties');
		$mobileTmp = $prop['mobile_tmp']['value'];
		if($mobileTmp){
		  if ($modx->getOption('mobile')) {
			  	$modx->resource->set('template', $mobileTmp);
		  }
		}
		//}
        break;
}
Вешается на пару событий, может для вас что-то излишнее в нем, не знаю.
Алексей Карташов
05 мая 2014, 01:48
1
+5
Перво-наперво нужно осознать главную мысль — заточить сайт под поисковики и заточить сайт для людей — это две совершенно разные вещи.
Основная задача — сделать так, чтобы и посетитель, и поисковик остались довольны и каждый получил своё.

Самая главная проблема вашего сайта — это дубликаты. Дубликаты всего и вся. Урлов, контента, ug-контента, ссылок, сквозных ссылок, сквозных блоков. Всё и везде дублируется. Дубликатов так много, что при более детальном анализе я, честно говоря, ох.ел. Это просто пздц.
Для Яндекса это один из ключевых показателей внутренней оптимизации.

Итак, поехали. Что исправлять.

1. Урлы.
Беда. Одна страница доступна минимум по четырём разным адресам.
www.kino-govno.com/comments/46414-vikingi--2x09/
www.kino-govno.com/comments/46414-vikingi--2x09
www.kino-govno.com/comments/46414/
www.kino-govno.com/comments/46414

Урлы с/без слэшей на конце — для поисковика это разные урлы. Хорошо хоть домен с/без www склеен.
Лучший вариант — первый (либо второй, по вкусу).

Важно понять — не должно быть никаких дубликатов урлов. Вообще. Всё, что не существует, должно отдавать 404. Точка. (в частности это относится и к вот этому — www.kino-govno.com/comments/46368-bozhe-moj-eto-sluchilos/p_100500666)

Урлы-синонимы (со слэшем и без) должны вести на какой-то один через 301.
Для текущих дубликатов урлов тоже лучше настроить 301 редирект — уже существующий статический вес не потеряется.

2. Тайтлы.
Тайтлы должны быть уникальны. Везде. На каждой странице. Точка.

Для страниц с пагинацией в тайтл и дескрипшн обязательно добавлять разбавку — что-то вроде «Страница №2» или подобное в конце заголовка. Главное, чтобы тайтлы были абсолютно уникальны в рамках всего сайта.

3. Для страниц с пагинацией настроить мета-теги rel=prev/next.
Читать здесь.

4. rel=canonical
Ну это ж элементарно. Где? Почему его ни где нет?
Изучайте.

Отвлечёмся на контент.
5. Дубликаты контента.
Это ад. Не, не так. АДЪ!
Яндекс вас до сих пор не зафильтровал только потому, что вы клёвые ребята с интересными новостями. К вам заходят и вас читают только потому, что вы — это вы. Постоянная лояльная аудитория = хорошие поведенческие. Это как лента.ру (когда-то) — ей насрать на seo, на неё всё-равно будут заходить и будут читать. Так и здесь — если бы вы надеялись исключительно на посетителей из поисковиков, то из-за технических seo-косяков вас бы в поиске давно не было.

В основном, новости на сайте короткие (в частности на главной). Соответственно:
— в ленте полные тексты новостей,
— одна новость может быть выведена в разных лентах новостей,
— в тэгах полные тексты новостей,
— в подразделах полные тексты новостей (т.е. Кино -> Рецензии или Аниме -> Эпизодники),
— на странице новости полный текст новости,
— если новость — это трейлер или какие-то кадры или постеры к фильму, то они так же дублируются в собственных разделах с фильмом.
— фильтры «Все рецензии» и «Только с медалями»,
— фильтры по алфавиту,
— фильтры по дате добавления,
— фильтры по количеству голосов,
— да до хрена всяких фильтров с собственными урлами и неуникальным содержимым.
Это всё дубликаты контента.

Это адЪ и израиль. Добавьте к этому ещё и то, что в сайдбарах все блоки сквозные и одинаковые. И комменты (к ним ещё вернёмся).
Вот и получаем, что на сайте ВООБЩЕ нет страниц с абсолютно уникальным контентом.
Это и есть самая главная проблема. Решать нужно её.

Теперь по порядку.
5.1. Лента.
Нет, начнём с меню.
А, нет, с ленты.
Или меню?

А впрочем, одна ху.ня.

5.1.1. Как пользователь вас спрашиваю — что за хрень с меню? Почему «Всё -> Новости» из верхнего меню и «Всё -> Новости» из цветного ведут на разные страницы?!
Подумать только, у вас есть страницы с вот такими урлами:
www.kino-govno.com/news
www.kino-govno.com/news/all/news
www.kino-govno.com/news/movies/news

У вас глаз замыленный, для вас эта структура чёткая и логичная. Но не для пользователя из поиска. Обычный пользователь — это не лояльная аудитория, он не станет разбираться. Я вот только что въехал в эту структуру, потому что углубился в её изучение, хотя читаю вас уже давно.
А там таких взаимоисключающих пунктов предостаточно.

Да о чём вообще речь, если главная страница — это полное зеркало страницы «Кино» в цветном меню www.kino-govno.com/news/movies ?! Как так-то?
А вот эта страница — www.kino-govno.com/news — случайно не такое же зеркало для главной? Я вот разницы от главной вообще не вижу.

Это самый важный момент — разберитесь со структурой сайта. Сделайте её понятной и однозначной.
Это не просто моя хотелка. Это обязательно.
Если бы структура была чёткая и понятная, то следующий пункт было довольно просто реализовать и подавляющее большинство дублей для поисковика просто испарились бы.

5.2.2. Все эти категории/подкатегории, новости/рецензии/трейлеры/эпизодники и прочее — это фактически просто лента всего и вся, отфильтрованная каждая по своему критерию.

Идеальный вариант, когда такая единая лента всего и вся — это главная страница (как хабр, к примеру).
Тогда проблема дублей решилась бы очень просто — на каждый раздел/подраздел/тэги ставится rel=canonical, который равен главной странице и всё.
Но в вашем варианте такая главная недопустима. Она же должна быть про кино.

Поэтому я предлагаю немного переосмыслить структуру.

Самый неплохой и реальный вариант структуры:
Цветное меню:
Кино (http://www.kino-govno.com/) (canonical = http://www.kino-govno.com/)
  |- Новости (http://www.kino-govno.com/feed/movies/news/) (canonical = http://www.kino-govno.com/)
  |- Рецензии (http://www.kino-govno.com/feed/movies/reviews/) (canonical = http://www.kino-govno.com/)
  |- Трейлеры
  |- ...
Аниме (http://www.kino-govno.com/feed/anime/) (canonical = http://www.kino-govno.com/feed/anime/)
  |- Новости (http://www.kino-govno.com/feed/anime/news/) (canonical = http://www.kino-govno.com/feed/anime/)
  |- Рецензии (http://www.kino-govno.com/feed/anime/reviews/) (canonical = http://www.kino-govno.com/feed/anime/)
  |- ...
ТВ (http://www.kino-govno.com/feed/tv/) (canonical = http://www.kino-govno.com/feed/tv/)
  |- Новости (http://www.kino-govno.com/feed/tv/news/) (canonical = http://www.kino-govno.com/feed/tv/)
  |- ...
Ссылок на
www.kino-govno.com/feed/
и
www.kino-govno.com/feed/movies/
ни где быть не должно, но при переходе на них должен быть 301 на главную. Пункта «Всё» быть не должно.

Пересортировать и структурировать верхнее меню, выпилив из него пункт «Всё».
И выпилить тэги/метки.
Зачем нужны тэги? Т.е. вот это вот — «Метки: галерея, постеры». Кто ими вообще пользуется?
Не, согласен, кто-то пользуется. Вопрос надо поставить по другому — если бы их не было, кто-нибудь из пользователей бы расстроился? Кто-нибудь почувствовал бы горечь утраты? Значимо ли это количество? Если нет, то предлагаю выпилить их нафиг. Ибо они создают ощутимое количество дубликатов (от общего числа), а значимость их маловероятна.


Зачём всё это, спросите вы?
Важно, чтобы в каждой тематической ленте не было пересечений статей. Эх, сложно это буквами написать..
Ну т.е. если бы главная страница была единой лентой, то можно было бы на всех разделах/подразделах поставить canonical на главную и проблем бы не было.

Но главная страница не может быть единой лентой.
Допустим, что вся лента расположена по адресу
www.kino-govno.com/feed/
Так вот при таком раскладе, нам бы пришлось на главной ставить canonical с отсылкой на /feed/, т.е. мы бы сказали поисковику, что главная — это не главная, а какая-то другая. А это ой как не хорошо.
Но почему обязательно ставить этот canonical? Да потому что центральный источник уникального набора контента — это лента /feed/, а главная — это отфильтрованный набор статей по критерию «Кино», т.е. список отфильтрованных дубликатов. Чтобы поисковик не считал это дубликатом — надо ставить canonical, а canonical ставить нельзя, потому что см.выше.

Поэтому надо всё разбить на разделы, чтобы в каждом из них был свой уникальный набор статей. А каждому подразделу (т.е. отфильтрованным дубликатам) ставить canonical равным соответствующему тематическому разделу.




В общем, народ, я потратил на эту писанину несколько часов, несколько раз всё переписывая, пытаясь правильно сформулировать и структурировать. Хотя мог быть за полчаса всё голосом рассказать.
Если будут вопросы, маякните сюда vk.com/lexakartashov, чтобы я в скайп вышел.

Если сделать всё описанное выше, то это где-то половина от необходимого (или чуть меньше).

Я ещё не затрагивал структуру содержимого (план документов), безумно размытый статический вес, то, как вы собственноручно размываете семантику (запутывая поисковики, что вообще не гуд), внутреннюю перелинковку, сквозные блоки, остальные дубликаты и как всё это элегантно реализовать технически.

У меня тут целый список. Расписывать всё буквами — терпения не хватит. А это всего лишь полчаса анализа =)

Если решить все эти моменты, то через полгода вы начнёте задумываться об обновлении машины, к примеру =)

В общем, будут вопросы — маякните.
Abu
Abu
28 августа 2013, 19:19
6
0
Оставлю памятку разграничения тикетов между пользователями и менеджерами.

1) Создается 2 группы пользователей: Users и Managers

*все действия в контексте web, роль Member

2) Создается группа ресурсов Restricted -при создании можно сразу автоматически дать доступ Administrator, анонимный доступ, дать доступ нашим группам Users,Managers (в результате в группах появляется доступ к группе ресурсов — Restricted и все пользователи могут их load,list,view (Resource))

3) Создается группа ресурсов Editable — автоматически дать доступ Administrator, дать анонимный доступ, дать доступ группам Users,Managers (в результате в группах появляется доступ к группе ресурсов — Editable)

4) Далее, чтобы можно было добавлять секции, добавляем в группах Administrator, Managers, Users —
еще один доступ к ресусам Editable, уже с политикой — TicketSectionPolicy.

5) Группам Administrator, Managers — дадим доступ и к ресурсам Restricted с политикой TicketSectionPolicy

6) Добавляем разрешенные к редактированию пользователями и менеджерами ресурсы в группу Editable, а разрешенные только к редактированию менеджерами ресурсы в Restricted — например Новости сайта в Restricted, а Вопросы пользователей в Editable.