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

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

С нами с 04 февраля 2013; Место в рейтинге пользователей: #58
Алексей Карташов
04 июня 2013, 11:59
0
в этом же плагине ->save() делать надо/обязательно?
по ходу тупой вопрос))
Алексей Карташов
04 июня 2013, 11:40
0
А, вон оно как. Теперь понял. Просто я всегда объект ресурса либо через xPDO получал, либо просто через переменную $resource. Ведь в плагинах могут быть доступны какие-либо переменные. В On(Before)DocFormSave доступны $id, $resource, $mode.
Теперь буду знать :-) Спасибо!

А после изменения значения через set():
$modx->event->params['object']->set();
в этом же плагине ->save() делать надо/обязательно? Чтобы другие плагины изменения заметили?
Алексей Карташов
04 июня 2013, 11:25
0
2. Да, чёрт побери, вот это у меня затуп. До меня только сейчас дошло, что закомментив, я наоборот сломал, а не починил xD
3. Просто здесь я исходил из логики, что если менять алиас путём обычного
$resource->set('alias', $newAlias);
$resource->save();
и есть ещё какой-нибудь плагин, который работает на сохранение документа, и этот другой плагин отрабатывает ДО моего плагина, то изменение алиаса тот плагин уже не увидит. Ведь сайт-то я сейчас доделаю, отдам заказчику и повлиять на то, как его будут дальше дорабатывать, я уже никак не смогу (вдруг он порядок выполнения плагинов изменит, мало ли, всякое бывает). Поэтому хотел предусмотреть все варианты, чтобы ни где ничего случайно не поломалось.
Но видать и правда правильней через методы xPDO сохранять.

Спасибо, в очередной раз, за консультацию! :-)
Алексей Карташов
31 мая 2013, 15:13
0
Как вы определили что он не заработал? Визуально на странице ничего не происходить не будет. Результат суммирования значений выводится в консоль браузера. Это вот эта строка:
console.log(summ); // <- result
Дальше вы можете делать с переменной summ всё, что пожелаете — вставить куда-нибудь на страницу или что угодно.
Если вы не понимаете как это сделать, то читайте основы яваскрипта, например здесь.
Попробуйте заменить вышеприведённую строчку кода на вот это:
alert(summ); // <- result
Если не будет всплывающего окна с результатом, то ошибка действительно где-то в другом месте.
Алексей Карташов
30 мая 2013, 23:37
0
Не, андерскор подключать не надо, я просто функцию из него выдернул, остальное из него для этого примера не нужно.

Честно говоря, не знаю почему у вас не работает, может потому что из приведённого выше кода видно, что jquery не подключен? :-) Он как раз таки нужен)
И добавьте доктайп перед тегом html:
<!DOCTYPE html>
<html>
Это доктайп html5, и когда он прописан, то писать атрибуты type и language в теге script уже не надо, можно просто:
<script>..</script>
или
<script scr="/js/scripts.js"></script>
з.ы. в следующий раз нажимайте ссылку «Ответить» под автором комментария (в данном случае под моим), а не на кнопку «Оставить новый комментарий», потому что при ответе на конкретный коммент автору этого комментария придёт уведомление на почту.
Алексей Карташов
29 мая 2013, 01:59
0
Ох уж эти жиквери-писалкины. Даже числа сложить без него уже не умеют.
html:
<select multiple>
	<option val="1">1</option>
	<option val="2">2</option>
	<option val="3">3</option>
	<option val="4">4</option>
	<option val="5">5</option>
	<option val="6">6</option>
</select>
js:
// Underscore.js isArray()
var isArray = Array.isArray || function(obj) {
    return toString.call(obj) == '[object Array]';
};

$('select').on('change', function(e) {
    var $this = $(this),
        values = $this.val(),
        summ = 0;
    if (isArray(values)) {
        for (var i = 0, length = values.length; i < length; i++) {
            summ += parseInt(values[i], 10);
        }
    } else {
        summ = values;
    }
    console.log(summ); // <- result
}).triggerHandler('change'); // 'triggerHandler'! Not 'change()' or "trigger('change')"!
Алексей Карташов
26 мая 2013, 22:58
0
Где-нибудь в сниппете:
<script>
	window.variableName = "<?php echo $variableName; ?>";
</script>
ПОСЛЕ вызова сниппета (инлайновый скрипт либо из подключенного файла):
console.log(variableName);
Алексей Карташов
26 мая 2013, 00:52
0
Да, гитхаб — было б очень удобно, поддерживаю!
Надеюсь, что всё-таки выложите (-:
Алексей Карташов
24 мая 2013, 19:21
0
Да, собссна, так же и передавай.
$select = array();
$where = array();
$columns = array();
$where['Ticket.id:>='] = 123; // for example
$where[] = 'MATCH (pagetitle, longtitle, description, alias, introtext, content, class_key) AGAINST (:qstr2 IN BOOLEAN MODE)';
$columns[] = '`Ticket`.`id`';
$columns[] = '`Ticket`.`published`';
$columns[] = /* ... */;
$columns[] = 'MATCH (pagetitle, longtitle, description, alias, introtext, content, class_key) AGAINST (:qstr2 IN BOOLEAN MODE) as relevance';
$class = 'Ticket';
$select[] =	'"Ticket":"'.$modx->getSelectColumns($class, $class).', '. implode(', ', $columns).'"';
$pdoFetchConfig = array(
	'select' => '{'.implode(',',$select).'}',
	/* ... */
);
if (count($where))  $pdoFetchConfig['where']  = $modx->toJSON($where);
$pdoFetch = $modx->getService('mypdofetch','mypdoFetch',$modx->getOption('pdotools.core_path',null,$modx->getOption('core_path').'components/pdotools/').'model/pdotools/',$pdoFetchConfig);
Алексей Карташов
07 мая 2013, 16:49
0
Ну Алёёёша, ну балбееес!

Спасибо огромное, Василий! Просто преогромное :-)
Алексей Карташов
07 мая 2013, 16:38
0
Спасибо, заработало!

Блин, а вот getTickets так и не заводится :-(
[[!getTickets?
    &tpl=`tpl.Tickets.list.row`
    &return=`chunks`
    &showUnpublished=`1`
    &showLog=`1`
    &parents=`6`
    &includeContent=`1`
    &showHidden=`1`
]]
Если запрос из лога выполнить в базу напрямую, то выдача есть, а на странице, в месте вызова сниппета, ничего, кроме лога, не выводит.
Чанк рабочий (через этот же чанк example.pdoFetch свои результаты выводил)…

Уже блин и так, и сяк параметры набирал — без толку.

Где я мог опять накосячить?
Алексей Карташов
07 мая 2013, 15:39
0
Опа, вёрстка споткнулась об закрывающий /pre
Алексей Карташов
02 мая 2013, 20:18
0
Не, меня всё устраивает :-)
Тем более, если других вариантов нет)
Алексей Карташов
02 мая 2013, 19:11
0
Тогда по логике получается, что это не доработка системы? Или ошибка?
Почему бы юзера сразу не перезаписывать? У разработчиков были причины?
А если были, то есть вероятность, что при таком подходе что-то где-то может сломаться или сработать не так…

Но вообще, странное, на мой взгляд, поведение.
Алексей Карташов
02 мая 2013, 18:52
0
В общем, пока выход такой:
Чтобы данные о пользователе в системе были доступны сразу же после логина, надо просто перезаписывать $modx->user:
$modx->user = $user;
При логауте устанавливать в анонима:
$modx->user = $modx->getObject('modUser', 0);
Не знаю, на сколько правильный подход и что может сломаться при таком действии, но другого варианта я пока не вижу.

Если кто-то прочитает это после праздников и у него будут мысли по этому поводу — не стесняйтесь их здесь высказывать :-)
Алексей Карташов
02 мая 2013, 18:46
0
Так, на тестовом мой косяк, внутри функции loginUser забыл написать global $modx.

А вот по сабжу выяснилось вот что: юзер логинится, но это становится видно только после перезагрузки страницы.
Т.е. получается, что при
$modx->runProcessor('security/login', $data);
в $modx->user пользователь станет доступен не прям сразу после вызова процессора, а только при перезагрузке страницы. С логаутом та же картина.
Уже что-то, но всё-равно не годится :-(
Алексей Карташов
02 мая 2013, 18:19
0
Попробовал сейчас на тестовом воспроизвести, так там вообще система не даёт пользователя зарегистрировать — в лог падает ошибка:
User create error. Username: mail@example.com, Message: not_logged_in
Ну т.е. в лог ошибку-то я записываю, но вот not_logged_in (Не вошёл!) процессор отдаёт. И почему вот он её отдаёт?..
Алексей Карташов
30 апреля 2013, 09:17
0
Понял, спасибо!
Алексей Карташов
30 апреля 2013, 08:31
0
Василий, а при таком подходе проверка на правильность email'а самим modx'ом осуществляется, не подскажешь?
Или надо самому валидацию мыла делать?