Справка
Объект
Безымянные методы объекта делятся на три типа:
- Поля-переменные ([объект.поле])
- Подтаблицы ([объект.подтаблица.объекты])
- Связанные части ([объект.связанная_часть(параметр1=значение1)])
Безымянные методы переопределяют друг друга в указанном порядке. В 1ую очередь смотрятся поля, во 2ую - подтаблицы и в последнюю - связанные части.
Для полей характерна возможность получить не только их значение, но и обратиться к их параметрам ([объект.поле] выдаст значение поля, [объект.поле.длинна] выдаст обработчик значения, а [объект.поле.спец.имя] выдаст обработчик поля).
Для более полного доступа к полю объекта следует использовать команду [.col]. В данный момент следующие настройки поля перекрывают обработчики значения: name, id, type, col. Если поле ссылается на массив объектов, то перекрытия нет, т.к. обработчики массива не совпадают с обработчиками поля (однако перекрытие всё равно возможно в том случае, когда идёт обращение к первому элементу массива, см.массивы).
Код: [user]
Результат: Пользователь
Для отображения полного перечня владельцев используйте команду [Все владельцы]
Код: [table]
Результат: Таблица
Код: [major]
Результат: Поле объекта
Методы поля позволят обращаться к его значению (получать и записывать), т.к. методы поля будут привязаны к текущему объекту.
Код: [cols]
Результат: Массивы
Для доступа к конкретному полю (например, для получения его значения) не обязательно обращаться к данному массиву.
Можно использовать такую конструкцию:
[cow.title]
Где [cow] - текущий объект (например, открытая статья), а [title] - поле "Заголовок" статьи.
Данная команда выведет заголовок текущей статьи.
Именно такой подход предложит разработчику визуальный редактор вставки значения. Сразу же после выбора нужного объекта будет предложен перечень его доступных полей.
Код: [col]
Результат: различный
Например:
[x='title']
[cow.col($x).value]
Выдаст заголовок объекта
Методы поля позволят обращаться к его значению (получать и записывать), т.к. методы поля будут привязаны к текущему объекту.
Код: [enable?]
Результат: Значение (текст, числа, дата)
[true], если объект активен
[false], если объект неактивен
Код: [pos]
Результат: Значение (текст, числа, дата)
Код: [selected?]
Результат: Значение (текст, числа, дата)
Например, при разборе URL domain.com/page1/article1
объект "Страница1" и "Статья1" будет выдавать [true] при запросе [selected?]
Код: [linked]
Результат: Массивы
Если необходимо выдать объекты определённого типа, то в аргументе метода можно указать нужную таблицу.
Попробуем выбрать все статьи определённого тега.
Получаем тег:
[tag=cex.tags.get('Интересное')]
Получаем все, связанные с ним объекты (например, статьи и категории статей):
[$tag.linked]
Получаем только статьи:
[$tag.linked('articles')]
Если в системе есть несколько таблиц 'articles', то можно в качестве аргумента использовать ID таблицы:
[$tag.linked(cex.articles.id)]
Код: [linked_count]
Результат: Значение (текст, числа, дата)
Код: [wayback]
Результат: Массивы
Например, мы будем работать с мультивложенной таблицей "Страницы".
Создадим в ней страницу "О компании".
В ней создадим подстраницу "Сотрудники", а в ней создадим подстраницу "Отдел".
Для страницы "Отдел" массив [wayback] будет содержать "Сотрудники" и "О компании".
Для страницы "Сотрудники" массив [wayback] будет содержать только "О компании".
Для страницы "О компании" массив [wayback] будет пуст.
Команда выдаёт родителей объекта только в рамках текущей таблицы. Если нужно выйти за эти рамки, то можно воспользоваться командой [Массив всех родительских объектов]
Код: [allway]
Результат: Массивы
Например, мы можем взять упомянутый в [wayback] пример (три вложенные друг в друга страницы: о компании, сотрудники, отдел).
Добавить в него подтаблицу "Комментарии".
Добавим два комментария - "Вопрос" и вложенный в него "Ответ на вопрос".
Теперь для объекта "Ответ на вопрос" массив [allway] будет состоять из следующих элементов:
- Вопрос
- Отдел
- Сотрудники
- О компании
Код: [sub]
Результат: Массивы
Например, если у страницы есть подстраницы, но кроме этого у неё также есть подобъекты типа "комментарии", то команда [sub] выдаст только подстраницы.
Пример:
[tree cow.sub]
[if first?]Подрезделы:[/if]
[cur.title]
[if !last?] , [/if]
[/tree]
Выведет подразделы текущей открытой страницы.
Код: [allsub]
Результат: Массивы
Код: [ups]
Псевдонимы: owners
Результат: Массивы
Код: [highlight]
Выдаёт набор отрывков, совпадающих с искомым запросом, а также сопутствующие фразы (количество настраивается в соответственном параметре).
Код: [highlight_only]
Код: [admin_url]
Псевдонимы: aurl
Результат: Значение (текст, числа, дата)
Код: [full_url]
Результат: Значение (текст, числа, дата)
Для примера рассмотрим модуль "Статьи".
В таблице "Категории статей" в качестве подтаблиц находятся сами "Статьи", кроме этого статьи находятся и отдельно от категорий.
Запустим данный метод у произвольной статьи.
- Вначале будет произведён поиск страницы, к которой присоединён экземпляр модуля текущей статьи (если связь обеспечена именно таким образом).
- Затем будет найден домен, связанный с экземпляром модуля "Страницы".
- После этого будет запрошена часть-обработчик страниц, проанализированы правила URL-распознавания, URL-префиксы и т.д.
- Затем таким же образом будут проанализированы части отображения категорий статей и самих статей.
Из всего этого будет сформирован URL, при помощи которого будет открыт текущий объект.
Если вернуться к нашему примеру, то этот URL может иметь такой вид:
domain.net / articles_page /
category1 / articles / article1
Где articles_page - URL страницы, на которой размещён модуль со статьями.
Category1 - URL текущей категории
Articles - URL-префикс части, отвечающей за отображение статей внутри категории.
Article1 - URL текущей статьи.
Код: [wayback_url]
Псевдонимы: wayback3
Результат: Значение (текст, числа, дата)
Код: [allway_url]
Псевдонимы: allway3
Результат: Значение (текст, числа, дата)
Код: [next]
Результат: Объект
Данная операция требует подгрузки всего массива объектов, в рамках текущей таблицы (т.е. затратна по потребляемой памяти и процессорному времени).
Для того, чтобы выдать следующий объект без учёта вложенности, используйте команду [Следующий (упрощ.)]
Код: [prev]
Результат: Объект
Данная операция требует подгрузки всего массива объектов, в рамках текущей таблицы (т.е. затратна по потребляемой памяти и процессорному времени).
Для того, чтобы выдать предыдущий объект без учёта вложенности, используйте команду [Предыдущий (упрощ.)]
Код: [neighbors]
Результат: Массивы
Код: [edit?]
Результат: Значение (текст, числа, дата)
Код: [view?]
Результат: Значение (текст, числа, дата)
Код: [del?]
Результат: Значение (текст, числа, дата)
Код: [copy]
Результат: Объект
Например, скопируем статью из одной категории в другую:
Вначале получим статью:
[article=
cex.category.find(subtable='articles')
.where('title','==','Интересная статья')
.first]
Далее найдём нужную категорию:
[cat=cex.category.get('Новости')]
Осуществим копирование:
[$article.copy($cat.articles.id)]
Для осуществление операции у пользователя должен быть доступ на добавление объектов в указанную таблицу.
Потомки объекта также будут скопированы вместе с объектом. Для копирования без потомков используйте метод [Копировать (без потомков)]
Код: [copy_single]
Код: [set_pos]
Код: [edit]
Псевдонимы: editrow
Метод является альтернативой конструкции [editrow].
Для изменения необходимо указать набор переменных и их новые значения.
Например, поменяем дату и заголовок статьи:
[$article.edit(
'title'='Новый заголовок',
'date'=glob.date)
]
При этом обработчики переменных таблицы не будут выполнены. Для изменения объекта с запуском обработчиков используйте метод [Изменить (с обработчиками)]
Код: [set_user]
Код: [depend]
Функция идентична [Копировать], однако, вместо копирования объект получает дополнительное расположение.
Таким образом один объект может находиться в нескольких разных расположениях (экземплярах модуля, подтаблицах и т.д.).
Код: [signal]
В сообщении будет также указано к какому объекту оно относится, а также будет присутствовать ссылки на этот объект в административном кабинете и на сайте.
Если сообщение отправлено группе пользователей, то оно будет считаться прочитанным после прочтения первым пользователем из группы.
Код: [if]
Результат: различный
Код: [_function]
Псевдонимы: _func
Результат: различный
В качестве главной переменной функции назначается текущий объект.
Более подробно смотрите в [_function]
Код: [_component]
В качестве главной переменной компонента назначается текущий объект.
Более подробно смотрите в [_function]
Код: [_show]
В качестве главной переменной отображения назначается текущий объект.
Более подробно смотрите в [_function]
Код: [_form]
В качестве главной переменной формы назначается текущий объект.
Более подробно смотрите в [_function]
Код: [_part]
В качестве главной переменной части назначается текущий объект.
Более подробно смотрите в [_function]
Код: [prepare]
Результат: различный
Смысл оператора в уменьшении количества запросов к серверу.
Например, подгрузим все переменные текущей открытой страницы:
[cow.prepare('*')]
Подгрузим некоторые её переменные:
[cow.prepare('title','body')]
Подгрузим все статьи открытой категории:
[cow.prepare('sub:articles')]
А также подгрузим у этих статей их анонсы и даты:
[cow.prepare('sub:articles')
.prepare('anons','date')]
Код: [with]
Результат: различный
Например:
[$article.with(cur.title+' '+cur.date)]
Выдаст заголовок и дату статьи.
Читать далее про "Пользователь"