Алексей Карташов

Алексей Карташов

С нами с 04 февраля 2013; Место в рейтинге пользователей: #58
Алексей Карташов
08 марта 2013, 00:35
0
Не, return false это такая коварная штука, которая помимо предотвращения действия по умолчанию, ещё и останавливает «всплытие» события по DOM. А иногда это бывает ой как не хорошо.
Лучше уж сферическое «e.preventDefault(); не во всех браузерах правильно срабатывает», чем долгий и нудный поиск бага на тему — почему же закрывается js-модальное окно или кастомный комбобокс…

Кстати, лично вы встречали какие-либо проблемы при использовании e.preventDefault()? Я лично нет (даже в ишаках, включая 7й), хотя верстаю много и (возможно) профессионально.
Алексей Карташов
05 марта 2013, 18:43
0
чорд, когда писал свой коммент, не видел, что уже ответили… надо чаще обновлять страницу.
Алексей Карташов
05 марта 2013, 18:13
0
2. Чтобы работал такой функционал, надо использовать getResource вместо getTickets. В вызове getResource надо выставить параметры
[[getResource? ... &showHidden=`1` &includeContent=`1`]]
При &includeContent=`1` дополнительно заработают плейсхолдеры [[+date_ago]], [[+comments]], [[+views]].
Конечно, с getResource'ом будет сильно медленнее.

По поводу пунктов 3 и 4 — раз вы уже знаете где и что можно исправить в сниппетах — не ждите, вносите изменения и отправляйте pull request в репозиторий Тикетов. Быстрее появится в релизе :-)
Алексей Карташов
05 марта 2013, 18:03
0
Вообще, такой запрос составить легко (даже очень просто). Нужны минимальные знания sql. Но чтобы вам помочь, надо знать — какой тип данных вы используете для хранения даты в таблице?
Алексей Карташов
05 марта 2013, 18:01
0
Если не хотите писать запрос руками, то юзайте pdoTools Василия.
pdoTools — это такой конструктор запросов. В нём можно присоединять сколько вам угодно таблиц, использовать сортировки и всё-всё-всё. Описание ищите здесь на сайте.
Алексей Карташов
22 февраля 2013, 13:27
0
ок, понял. спасибо)
Алексей Карташов
20 февраля 2013, 17:47
0
Да это понятно) Было бы удивительно, если бы его не было :-) Это ж nginx!
Просто времени с этим разбираться пока нету, а переезд будет не завтра и не послезавтра. Поэтому изучение nginx'а пока откладываю.
А вот решение с кроном уже сейчас нужно.
Алексей Карташов
20 февраля 2013, 15:07
0
Это смотря что вы имеете ввиду под апи с токенами для входа. Сходу сказать не могу — потому что реализаций море и у всех по своему. Поэтому пример немного не корректен. Если бы вы конкретный пример привели, можно было бы посмотреть)
Алексей Карташов
20 февраля 2013, 14:46
0
Ну это вообще не защита :-)
Такой адрес запишется во все логи по всей цепочке «пользователь» => «сервер».
В том числе всякими Яндекс.Недобраузерами и иже с ними, роботы которых любят посещать проснифанные урлы на предмет индексации.
Так что это вообще не выход)
Алексей Карташов
20 февраля 2013, 14:41
0
Про паролирование через htaccess и htpasswd знаю и пользуюсь, да.
Но планирую слезать с апача. А nginx пока не знаю. С ним ещё только буду разбираться.
Поэтому такой вариант не особо рассматриваю. Но спасибо, что напомнили :-)
Алексей Карташов
20 февраля 2013, 13:31
0
Вы безусловно правы, но не везде есть возможность использовать putty. Да и с планшета/мобильника куда проще сперва залогиниться, а потом открыть файл, чем искать и настраивать ssh-клиенты для ондроеда и иос)

Ну это уже больше прихоти, конечно :-) Да к тому же, не сильно влияющие на конечную безопасность.

Да и не такой уж и большой огород :-)
if ($modx->user->id != 1 && !XPDO_CLI_MODE) {
    header('HTTP/1.1 404 Not Found');
    exit;
}
if (!XPDO_CLI_MODE) set_time_limit(0);
Алексей Карташов
20 февраля 2013, 13:03
0
Так серверной авторизации-то и не надо. Из командной строки сервера этот скрипт смогу запустить только я (и крон). А вот из браузера не только я.

Поэтому отсекаем всех, кто не из консоли и кто запускает скрипт через веб-сервер, кроме авторизованного юзера с id администратора. который залогинен:
if ($modx->user->id != 1 && !XPDO_CLI_MODE) {
	// ...
Просто может есть ещё какие-то тонкости, о которых я не подумал?
Алексей Карташов
20 февраля 2013, 12:51
0
И так, и так.

Представьте ситуацию, что есть некий сайт, который предоставляет некое апи для доступа к своим данным, которые периодически обновляются. Заранее об обновлениях неизвестно, да и обновления не такие уж и частые.
Поэтому пишем скрипт для работы с этим апи, чтобы проверять обновления данных и отображать их у себя, ставим в крон, к примеру раз в сутки в ночное время, когда нагрузка на сервер небольшая. А может быть и раз в двое суток — обновления-то не частые.

Но вот я заметил, что произошло обновление этих данных на том самом сайте и мне не за чем ждать до ночи, чтобы эти обновления увидеть у себя. А то и до ночи следующего дня.
Тогда я просто логинюсь в админку, открываю в браузере свой файл и, собственно, вуаля :-)
Алексей Карташов
20 февраля 2013, 12:26
0
ну когда ip домашнего компа — динамика, да ещё и с частыми реконнектами, то не выход)
Алексей Карташов
20 февраля 2013, 12:00
0
Т.е. смысла городить собственные велосипеды нету?
Алексей Карташов
20 февраля 2013, 11:20
0
Не за что) Сам в итоге «ниасилил» — времени не хватает, но думаю к ext'у ещё вернусь.

Может хоть вам пригодится)
Алексей Карташов
20 февраля 2013, 06:10
0
уж не знаю, почему вас в гугле забанили, но вот:
ExtJS-4 с самого начала
Ext4 Grid на пальцах
Офф. доки
Ну и, конечно же, здесь.

Только учтите, что в ModX испольуется ExtJS-3, а первые 2 ссылки выше о ExtJS-4. А это большая разница. Но в целом для ознакомления пойдёт)
Алексей Карташов
14 февраля 2013, 23:36
0
Средства modx здесь не при чём. Простой яваскрипт.
Этот код вставить в месте, где нужно вывести ссылку:
<script>
    var Base64={_keyStr:'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',encode:function©{for(var a='',d,b,f,g,h,e,i=0,c=Base64._utf8_encode©;i<c.length;)d=c.charCodeAt(i++),b=c.charCodeAt(i++),f=c.charCodeAt(i++),g=d>>2,d=(d&3)<<4|b>>4,h=(b&15)<<2|f>>6,e=f&63,isNaN(b)?h=e=64:isNaN(f)&&(e=64),a=a+this._keyStr.charAt(g)+this._keyStr.charAt(d)+this._keyStr.charAt(h)+this._keyStr.charAt(e);return a},decode:function©{for(var a='',d,b,f,g,h,e=0,c=c.replace(/[^A-Za-z0-9\+\/\=]/g,'');e< c.length;)d=this._keyStr.indexOf(c.charAt(e++)),b=this._keyStr.indexOf(c.charAt(e++)),g=this._keyStr.indexOf(c.charAt(e++)),h=this._keyStr.indexOf(c.charAt(e++)),d=d<<2|b>>4,b=(b&15)<<4|g>>2,f=(g&3)<<6|h,a+=String.fromCharCode(d),64!=g&&(a+=String.fromCharCode(b)),64!=h&&(a+=String.fromCharCode(f));return a=Base64._utf8_decode(a)},_utf8_encode:function©{for(var c=c.replace(/\r\n/g,'\n'),a='',d=0;d<c.length;d++){var b=c.charCodeAt(d);128>b?a+=String.fromCharCode(b):(127<b&&2048>b?a+=String.fromCharCode(b>> 6|192):(a+=String.fromCharCode(b>>12|224),a+=String.fromCharCode(b>>6&63|128)),a+=String.fromCharCode(b&63|128))}return a},_utf8_decode:function©{for(var a='',d=0,b=c1=c2=0;d<c.length;)b=c.charCodeAt(d),128>b?(a+=String.fromCharCode(b),d++):191<b&&224>b?(c2=c.charCodeAt(d+1),a+=String.fromCharCode((b&31)<<6|c2&63),d+=2):(c2=c.charCodeAt(d+1),c3=c.charCodeAt(d+2),a+=String.fromCharCode((b&15)<<12|(c2&63)<<6|c3&63),d+=3);return a}};
    // сюда поместить сгенерированную строку:
	var str = 'PGEgaHJlZj0ibWFpbHRvOm1haWxAbWFpbC5ydSI+bWFpbEBtYWlsLnJ1PC9hPg==';
	document.write(Base64.decode(str));
</script>
, где «PGEgaHJlZj0ibWFpbHRvOm1haWxAbWFpbC5ydSI+bWFpbEBtYWlsLnJ1PC9hPg==» — это закодированная методом Base64.encode строка:
<a href="mailto:mail@mail.ru">mail@mail.ru</a>
Соответственно, если вам надо в этой строчке что-то поменять, в консоли браузера выполните:
str = '<a href="mailto:new-mail@mail.ru">new-mail@mail.ru</a>';
	console.log(Base64.encode(str));
И скопируйте в код выше (где находится соответствующая пометка) получившуюся строку в консоли.
Алексей Карташов
11 февраля 2013, 00:15
0
Пишите на почту.
Вы бы её тогда указали чтоли..)
Алексей Карташов
04 февраля 2013, 17:54
0
Хм, фильтр по доп. параметрам без tv? Интересно… :-)
Прям с нетерпением жду)