Илья Уткин

Илья Уткин

С нами с 15 декабря 2012; Место в рейтинге пользователей: #14
22 октября 2016, 20:19
+1
Логика примерно такая.

  1. Проходимся по списку фильмов на сегодня. Каждый фильм сохраняем как customExtraItem. Здесь можно в отдельных полях сохранить название, жанр, описание, картинку и filmID. Если фильм с таким filmID у нас в базе уже есть, обновляем у него информацию (мало ли, могло что-то поменяться).
  2. Во время получения информации о каждом фильме сохраняем кинотеатры, как customExtraOrder. Так же записывая ID кинотеатра, и обновляя данные в нашей базе, если такой кинотеатр есть.
  3. Каждый сеанс фильма сохраняем как customExtraOperation, указывая в нём наш внутренний ID кинотеатра и внутренний ID фильма (дату и время можно совместить в одном поле, сохраняя его как timestamp).

При такой структуре данных будет очень просто сделать разные выборки. Например, при клике на кинотеатр, можно составить его расписание на сегодня, с указанием всех фильмов и сеансов. Можно дать пользователю возможность выбора даты, чтобы он мог посмотреть сеансы на завтра или послезавтра, если скрипт будет запрашивать данные на несколько дней вперёд.

Таким образом будет огромное поле возможностей для расширения функционала.
21 октября 2016, 15:19
+1
Кажется, так
$q->select(array('msProduct.*'));
20 октября 2016, 12:24
+3
Для записи сеансов можно воспользоваться customExtra
20 октября 2016, 12:23
0
Можно сделать в плагине
$modx->setPlaceholder('res_id', $id);

А в сниппете потом получить его так
$id = $modx->getPlaceholder('res_id');

Ну и на странице будет доступен [[!+res_id]].
20 октября 2016, 08:43
0
А, ты еще не внёс изменения… Потому что у меня вот так:
20 октября 2016, 08:39
+7
Ах, чертяка… Придётся ставить этот ваш AdminTools…
19 октября 2016, 08:32
+2
Либо пишите свой сниппет, либо используйте дополнение Switch
19 октября 2016, 08:29
0
Нужно создать плагин, и в нём определить свою логику. Вот подробная инструкция: bezumkin.ru/sections/tips_and_tricks/2918/

Готового решения нет, придётся программировать.
18 октября 2016, 19:19
0
Вам нужно писать свой сниппет. Сначала выбирать 3 ресурса, у которых дата больше, чем сегодня, потом 3, у которых меньше. Даты полученных ресурсов сравнивать и показывать только 3 ближайших.
16 октября 2016, 11:19
+1
Ответ-то есть, но готового решения никто не предоставит, так как задача довольно специфическая. Теория такая:

Нужно производить выборку по объектам modTemplateVarResource, к каждому из которых «приджойнить» соответствующий ресурс (тикет), тогда у вас и будут соответствующие «дубли».

А вот чтобы реализовать это на практике, нужно составить правильный запрос, для чего нужно создать тестовый сервер, создать эти ТВ-шки, несколько тикетов и тестировать. Это, конечно, долго и никто бесплатно делать этого не собирается.
15 октября 2016, 21:54
0
Нужно приджойнить (Join) дочерние ресурсы и в where дописать условие Children.id IS NOT NULL
14 октября 2016, 17:48
0
Да, это глюк. Но для новых страниц всё должно быть нормально. Попробуйте создать нового специалиста.
14 октября 2016, 08:18
0
.htaccess переименован?
14 октября 2016, 08:18
0
Попробуй убрать все $modx->setLogLevel и $modx->log — может, это прерывает его работу…
12 октября 2016, 16:09
0
Вот тут и источник создаётся, и пользователь с ограниченным доступом: modx.pro/solutions/10026-script-to-create-user-defined/
12 октября 2016, 08:29
0
Ну, в сборке ТВ-шки прицепляются ко всем шаблонам (вроде). Делать настройку в виде интерфейса сложновато.

А если делать свою сборку, то вариант выше — вполне подойдёт. Мне надо в сборке добавить чекбоксы — какие чанки создавать, какие дополнения устанавливать. Вот это будет удобно, но никак руки не дойдут)))
11 октября 2016, 15:08
2
+3
У меня есть вот такой файлик, который позволяет большие числа переводить в 60-ричную систему для сокращения количества символов:

<?php
class SixtyCoder {
    public $table = '0123456789abcdefghijkmnopqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ';
    
    public function to60($number = 0) {
        $number = (int) $number;
        $output = '';
        return $this->divide($number);
    }
    
    public function from60($letters = '0') {
        $length = strlen($letters);
        $number = 0;
        for ($i = 0; $i < $length; $i++) {
            $pos = strpos($this->table, $letters[$i]);
            if ($pos === false) {
                return 0;
            }
            $pow = $length - ($i+1);
            $number = $number + $pos * pow (60, $pow);
        }
        return $number;
    }
    
    public function divide($number = 0, $letters = '') {
        if ($number < 60) {
            $letters = $this->getLetter($number) . $letters;
        } else {
            $rest = $number % 60;
            $letters = $this->getLetter($rest) . $letters;
            $number = ($number - $rest) / 60;
            $letters = $this->divide($number, $letters);
        }
        return $letters;
    }
    
    public function getLetter($number) {
        return substr($this->table, $number, 1);
    }
}

$coder = new SixtyCoder();
$time = time();
echo 'Long: ' . $time;
$short = $coder->to60($time);
echo '
Short: ' . $short;
echo '
Long from short: ' . $coder->from60($short);
04 октября 2016, 08:41
0
Та же самая фигня, что и в моём коде.

JavaScript делает ассинхронный запрос и то, что указано внутри success выполняется после всего остального кода. Вот внутри этого success вам нужно заново найти окно (которое в этот момент уже будет открыто) и модифицировать его.

К сожалению, конкретных методов ExtJS для этого подсказать не смогу. Создайте отдельный вопрос конкретно под эту задачу — как в ExtJS обратиться к окну по его id и добавить в него полей. Надеюсь, вам помогут.
03 октября 2016, 20:57
0
Да, всё верно говорят, сейчас слишком много неопределённости. Создайте сайт (если его еще нет), сделайте вёрстку страниц — страницу группы с кнопкой «Присоединиться», форму для создания группы, настройте личный кабинет на сайте и ищите уже специалиста под конкретное задание.