Василий Столейков

Василий Столейков

С нами с 19 декабря 2012; Место в рейтинге пользователей: #23
07 июля 2015, 11:49
0
Спасибо за совет! На семёрке (Windows 7) открывается при нажатой Ctrl+Click, хоть какое-то облегченье…
А сколько ты возьмёшь за добавление кнопок «Назад» и «Вперёд»? Может быть есть смысл собраться и оплатить — функция нужная и подразумевающаяся во всех структурах, которые работают на тикетах.
07 июля 2015, 10:58
0
Может, конечно, немного не в тему, но
очень не хватает в тикетах кнопок «Предыдущий тикет», «Вверх» и «Следующий тикет», как это реализовано в товарах в минишопе.
Приходится постоянно возвращаться к секции тикетов, искать отредактированный тикет и переходить к следующему, а это ужасно неудобно, когда тикетов очень много! Неудобно, потому что тикеты в дереве не отображаются, и приходится долго искать соседний.
На компьютере мышкой ещё нажимал на среднюю кнопку мыши для открытия статьи в соседней вкладке, но на ноутбуке это очень неудобно…
06 июля 2015, 15:31
0
1. Жалко что нельзя просто тв подключить, было бы очень удобно…
2. Да, id нужен был как отдельный столбец для сортировки по нему.
Спасибо за ответ!
06 июля 2015, 14:22
0
А если есть несколько однотипных, но мультиязычных сайтов, где языки находятся в подпапках /ru/, /en/?
Как бы вы организовали работу с несколькими мультиязычными сайтами в одной админке?
30 июня 2015, 09:47
0
Почему getTickets не работает с ms2Gallery?
26 июня 2015, 12:40
0
У меня 3 вопроса:
1. Как сделать тип поля выпадающим списком, чтобы можно было заданные значения выбирать из списка?
2. Возможно ли импортировать пользователя с расширенными полями? Нужно записывать в базе в поле extend в json-формате? Или можно это сделать программно, используя классы и методы userProfile?
3. Как вывести какое-то расширенное поле пользователя в произвольном месте страницы?
24 июня 2015, 15:15
0
В данной ситуации у меня такой же вопрос — зачем?
Но есть другие ситуации: например залил 150 тысяч товаров, потом удалил половину из них — в итоге любая новая страница имеет id = 196489 например.
А если тип сайта такой, что товары регулярно добавляются и со временем очищаются, что будет с id-шками через пару лет, когда дойдёт до миллиона например?
24 июня 2015, 12:34
0
Точно, супер, работает! Как всё просто! Спасибо!
24 июня 2015, 12:29
1
0
Если я не ошибаюсь, то вот этот метод формирует URI:
$aliasPath = $data->getAliasPath($alias);
24 июня 2015, 12:10
0
Спасибо тебе!
Этот кусок кода успешно записал мне alias-ы:
foreach($modx->getCollection('modResource', $q) as $data){

    $title = $data->get('pagetitle');
    $id = $data->get('id');
    $alias = $data->cleanAlias($title);
    $data->set('alias', $alias);

    if($modx->exec("UPDATE modx_site_content SET alias='$alias' WHERE id ='$id'")) {
        echo "\nНе обработана строка: ".$data->get('pagetitle')." == ".$alias;
    }
    else {
        $updated++; 
        echo "\nОБРАБОТАНО: ".$data->get('pagetitle')." == ".$alias;
    }
}
но с URI пока не могу разобраться, что именно из тех строк что ты мне показал использовать…
24 июня 2015, 11:47
0
Классно, спасибо за этот метод! Но он почему-то не срабатывает.
Я выбрал только один ресурс по id чтобы понаблюдать как заполнится поле alias у него, наблюдаю в phpMyAdmin. Но после срабатывания кода и попытки запуска процессора обновления поле остаётся пустым, то есть обновление не произошло!
Вот изменённый код:
<?php
ini_set("display_errors",1);
error_reporting(E_ALL);
header("Content-Type: text/html; charset=utf-8");

// Подключаем
define('MODX_API_MODE', true);
require 'index.php';

// Включаем обработку ошибок
$modx->getService('error','error.modError');
$modx->setLogLevel(modX::LOG_LEVEL_INFO);
$modx->setLogTarget(XPDO_CLI_MODE ? 'ECHO' : 'HTML');



// $modx->exec("UPDATE modx_site_content WHERE uri='prezentaczii/' SET uri=''");
// $modx->exec("UPDATE modx_site_content WHERE uri='informacziya/' SET uri=''");
// // $modx->exec("UPDATE modx_site_content SET uri = '' WHERE uri=alias");//удаляет uri равное alias
$modx->exec("UPDATE modx_site_content SET uri='' WHERE alias=''");
$modx->exec("UPDATE modx_site_content SET uri = '' WHERE alias = CONCAT(uri, '/')");//удаляет uri со слешем на конце равное alias
$modx->exec("UPDATE modx_site_content t1, (SELECT uri FROM modx_site_content GROUP BY uri HAVING COUNT(*) > 1)
t2 SET t1.uri = '' WHERE t2.uri = t1.uri AND uri_override = 0");//удаляет дубликаты uri на всякий пожарный

$modx->setLogLevel(1);
ini_set('max_execution_time', 7200);
ignore_user_abort(true);

$q = $modx->newQuery('modResource', array('id'=>'85'));
$q->andCondition(array(    
    'uri' => null,    
    'OR:uri:=' => '',   
    'OR:alias:=' => ''
));
$q->sortby('id');
$q->limit(1);

$rows = $updated = 0;

$s = $q->prepare();
$s->execute();
foreach($modx->getCollection('modResource', $q) as $data){

    $rows++;
    $modx->error->reset();

    $title = $data->get('pagetitle') . '-' . $data->get('id');
    $alias = $data->cleanAlias($title);
    $data->set('alias', $alias);

    $modx->runProcessor('resource/update', $data->toArray());
    if($modx->error->hasError()){
        print_r($modx->error->getErrors());
        echo "\nНе обработана строка\n".$data->get('pagetitle');
    }
    else {
        $updated++; 
        echo "\nОБРАБОТАНО\n".$data->get('pagetitle');
    }
}

print "\n==========================================\nВсего найдено документов по условию: ". $modx->getCount('modResource', $q)."\n";
echo "\nОбработано строк: $rows\n";
echo "\nОбновлено: $updated\n\n\n";
Результат выполнения кода:
Не обработана строка Тут название ресурса с id = 85
==========================================
Всего найдено документов по условию: 1
Обработано строк: 1
Обновлено: 0
Или записать alias напрямую, без процессоров?
23 июня 2015, 23:12
0
Уже 2 дня занимаюсь обновлением alias-ов и uri
Ресурсов довольно много, около 10 тысяч.
22 июня 2015, 15:38
0
Решил проблему своим скриптом на основе этого. Там я обновил нужные поля напрямую, минуя процессоры.
22 июня 2015, 14:45
0
Отключил системный параметр automatic_alias, и посыпались ошибки типа:
Error on create: alias: field_required
Но почему он создаёт (create), если в параметре я ему чётко указываю что нужно обновлять (update=1)???
22 июня 2015, 14:40
0
Или мне выгрузить все alias-ы и поставить их отдельной колонкой в csv и по алиасу обновлять? Правда пока не представляю себе как их выгрузить в том же порядке чтобы сопоставить строки…
22 июня 2015, 14:34
0
Да, было бы проще если бы оформить и доработать скрипт в отдельный компонент, даже если он будет платным потом.
22 июня 2015, 14:32
0
Хочу обновить данные из обычных ресурсов (не минишоповских). Может что-то ему не хватает?
21 июня 2015, 08:26
0
Мне больше интересно как с разных других php-сайтов собирать заявки (например в как ресурсы в виде тикетов) в одну админку MODX. То есть сайты разбросаны по другим серверам, но посылать данные формы они должны в базу MODX.
Какие тут должны быть этапы?
21 июня 2015, 08:18
0
Да, не совсем всё это освещено в статье…
Как я понимаю, тут ситуация, когда разные сайты-лэндинги разбросаны по сети и сделаны на MODX, а заявки с их форм собираются в одну битрикс-админку для их обработки менеджерами…