SEQUEL.ONE
С нами с 16 июня 2015; Место в рейтинге пользователей: #84LastModified и Office
Столкнулся с прoблемой компонента LastModified и Office. При включённом плагине перестаёт корректно работать авторизация. После ввода данных и нажатии на кнопку Вход не происходит смены чанков с не авторизованного на авторизованный и также с выходом. Ты вроде вышел, а отображается твоя учётка. При обновлении кэша браузера через CTRL + F5 всё нормально отображается. Может кто-нибудь подсказать как можно плагин допилить, чтобы сниппет Office не кэшировался?
<?php
/**
* MODx Revolution plugin which handle request If-Modified-Since
*
* @package lastmodified
* @var modX $modx MODX instance
* @var integer $dtm Value of last update time of document
* @var integer $ltm Value of HTTP_IF_MODIFIED_SINCE from request
* @var string $rule Cache-control directive (public, private)
* @var integer $maxage Cache max age in seconds
* @var integer $expire Cache expire in seconds
*/
if ($modx->event->name == 'OnWebPagePrerender') {
$dtm = ($modx->resource->get('editedon')) ? strtotime($modx->resource->get('editedon')) : strtotime($modx->resource->get('createdon'));
if (empty($dtm)) {
return '';
}
$rule = trim($modx->getOption('lastmodified.response'));
if (!in_array($rule, ['private', 'public'])) { // 'no-cache'
$modx->log(xPDO::LOG_LEVEL_ERROR, 'LastModified: wrong response directive value. Check configuration.');
return '';
}
$maxage = ((int)$modx->getOption('lastmodified.maxage') > 0) ? (int)$modx->getOption('lastmodified.maxage') : 3600;
$expire = ((int)$modx->getOption('lastmodified.expires') > 0) ? (int)$modx->getOption('lastmodified.expires') : 3600;
if (!empty($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
$ltm = strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']);
if ($dtm <= $ltm) {
$protocol = isset($_SERVER['SERVER_PROTOCOL']) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.1';
header($protocol . ' 304 Not Modified');
header('Last-Modified: ' . gmdate('D, d M Y H:i:s', $dtm) . ' GMT');
header('Cache-control: ' . $rule . ', max-age=' . $maxage);
header('Expires: ' . gmdate('D, d M Y H:i:s', time() + $expire));
exit();
}
}
header('Last-Modified: ' . gmdate('D, d M Y H:i:s', $dtm) . ' GMT');
header('Cache-control: ' . $rule . ', max-age=' . $maxage);
header('Expires: ' . gmdate('D, d M Y H:i:s', time() + $expire));
return '';
}
/**
* Update parent editedon field
*
* @var modX $modx MODX instance
* @var modResource $parent Parent resource object
*/
if ($modx->event->name == 'OnDocFormSave') {
if ($modx->getOption('lastmodified.update_start')) {
$mainId = $modx->getOption('site_start');
if ($mainId > 0 && $mainId !== $id) {
$main = $modx->getObject('modResource', $mainId);
if (!$main instanceof modResource) {
$modx->log(xPDO::LOG_LEVEL_ERROR, 'LastModified: get wrong modResource instance for main page with id ' . $mainId . ' for document ' . $id. '.');
return '';
}
$main->set('editedon', time());
$main->save();
unset($main);
}
unset($mainId);
}
if ($modx->getOption('lastmodified.update_parent')) {
$level = ((int)$modx->getOption('lastmodified.update_level') > 0) ? (int)$modx->getOption('lastmodified.update_level') : 1;
$parentIds = $modx->getParentIds($id, $level, ['context' => 'web']);
foreach ($parentIds as $parentId) {
if ($parentId === 0) {
continue;
}
$parent = $modx->getObject('modResource', $parentId);
if (!$parent instanceof modResource) {
$modx->log(xPDO::LOG_LEVEL_ERROR, 'LastModified: get wrong modResource instance for parent with id ' . $parentId . ' for document ' . $id. '.');
return '';
}
$parent->set('editedon', time());
$parent->save();
unset($parent);
}
return '';
}
}
Добавление select с данными из другой таблицы в modExtra
Всем привет. Кто-нибудь на заготовке modExtra делал CоmboBox с данными из других таблиц? У меня есть файл вызывающий модальное окно с полями для заполнения:
assets/components/extras/js/mgr/widgets/categories.window.js
assets/components/extras/js/mgr/widgets/categories.window.js
Extras.window.CreateCategory = function (config) {
config = config || {};
if (!config.id) {
config.id = 'extras-category-window-create';
}
Ext.applyIf(config, {
title: _('extras_category_create'),
width: 550,
autoHeight: true,
url: Extras.config.connector_url,
action: 'mgr/category/create',
fields: this.getFields(config),
keys: [{
key: Ext.EventObject.ENTER, shift: true, fn: function () {
this.submit()
}, scope: this
}]
});
Extras.window.CreateCategory.superclass.constructor.call(this, config);
};
Ext.extend(Extras.window.CreateCategory, MODx.Window, {
getFields: function (config) {
return [{
xtype: 'textfield',
fieldLabel: _('extras_category_name'),
name: 'name',
id: config.id + '-name',
anchor: '99%',
allowBlank: false,
}, {
xtype: 'textfield',
fieldLabel: _('extras_category_repository'),
name: 'repository_id',
id: config.id + '-repository_id',
anchor: '99%',
allowBlank: true,
}, {
xtype: 'xcheckbox',
boxLabel: _('extras_category_active'),
name: 'active',
id: config.id + '-active',
checked: true,
}];
},
loadDropZones: function () {
}
});
Ext.reg('extras-category-window-create', Extras.window.CreateCategory);
Extras.window.UpdateCategory = function (config) {
config = config || {};
if (!config.id) {
config.id = 'extras-category-window-update';
}
Ext.applyIf(config, {
title: _('extras_category_update'),
width: 550,
autoHeight: true,
url: Extras.config.connector_url,
action: 'mgr/category/update',
fields: this.getFields(config),
keys: [{
key: Ext.EventObject.ENTER, shift: true, fn: function () {
this.submit()
}, scope: this
}]
});
Extras.window.UpdateCategory.superclass.constructor.call(this, config);
};
Ext.extend(Extras.window.UpdateCategory, MODx.Window, {
getFields: function (config) {
return [{
xtype: 'hidden',
name: 'id',
id: config.id + '-id',
}, {
xtype: 'textfield',
fieldLabel: _('extras_category_name'),
name: 'name',
id: config.id + '-name',
anchor: '99%',
allowBlank: false,
}, {
xtype: 'textfield',
fieldLabel: _('extras_category_repository'),
name: 'repository_id',
id: config.id + '-repository_id',
anchor: '99%',
allowBlank: true,
}, {
xtype: 'xcheckbox',
boxLabel: _('extras_category_active'),
name: 'active',
id: config.id + '-active',
}];
},
loadDropZones: function () {
}
});
Ext.reg('extras-category-window-update', Extras.window.UpdateCategory);
mFilter2 вывод фильтров в другом блоке
Как вывести секцию CDATA в XML?
Всем привет. Встала задача вывести в XML секцию CDATA, сам XML генерируется на PHP через массив. Вот пример того как это всё выводится:
<?php
/*
* Выводим данные по всем репозиториям для дерева разделов
*/
require_once dirname(__FILE__).'/response.class.php';
class ExtrasRepository extends ExtrasResponse{
var $root = '<repositories/>';
public function process(){
$result = array(
'repository' => [
'id' => '4d4c3fa6b2b0830da9000001',
'name' => 'Extras',
'description' => '<img src="http://modxcms.com/assets/images/icons/ico_tools.png" alt="Add-ons" class="left" /> <h3>Want something not included in the MODx core install?</h3><p>Menu builders to image galleries, helper utilitis to podcasting and everything in between. These add-ons can help you build a site to <em>exactly</em> match your vision.</p>',
'createdon' => '2011-02-04T18:05:07+0000',
'rank' => 0,
'packages' => 760,
'tag' => '',
'templated' => 0
],
);
return $this->toXML($result);
}
}
return 'ExtrasRepository';
Добавление данных в таблицу базы из AjaxForm и FormIT
Всем привет. Делаю сейчас компонент, в котором пользователи добавляют свои блоги и на них могут подписываться. Застопорился на моменте когда нужно добавлять данные. Решил что через AjaxForm и FormIt надёжнее.
Вообщем делал следующим образом. Вызвал сниппет с такими параметрами:
Вообщем делал следующим образом. Вызвал сниппет с такими параметрами:
{'!AjaxForm' | snippet : [
'snippet' => 'FormIt',
'form' => '@FILE components/ticketscommunity/form.tpl',
'redirectTo' => 16,
'hooks' => 'email,TicketsCommunityHooksBlog',
'emailSubject' => 'Добавление нового блога "[[+name]]"',
'emailTo' => 'admin@site.com',
'validate' => 'alias:required',
'validationErrorMessage' => 'В форме содержатся ошибки!',
'successMessage' => 'Сообщение успешно отправлено'
]}
Создание блогов пользователями Tickets
Всем привет. Недавно встала задача сделать что-то типа соц. сети с возможностью создания приватных блогов, тоесть пользователь может создать свой блог, как категорию и добавлять от имени блога топики, а также нужен функционал для подписки этих пользователей к блогу.
Проблема заключается в следующем, если делать категориями тикетов, то сама вкладка с созданными пользователями будет как простыня, есть ли возможность скрыть именно категории у выбранного родителя из админки?
И как вообще лучше это дело организовать? Может прозе сделать кастомными таблицами?
Проблема заключается в следующем, если делать категориями тикетов, то сама вкладка с созданными пользователями будет как простыня, есть ли возможность скрыть именно категории у выбранного родителя из админки?
И как вообще лучше это дело организовать? Может прозе сделать кастомными таблицами?
setup.options.php в последней версии modExtra
Всем привет. Сделал компонент на основе modExtra, но захотелось сделать установку компонентов по checkbox, но в новой версии нет файла setup.options.php и я не совсем понимаю как сделать при установке компонента форму, где можно было бы выбрать чекбоксами нужные компоненты для установки?
Как в modExtra сделать необязательные к заполнению поля?
Всем привет. Подскажите как в modExtra сделать необязательные к заполнению поля? Это же делается в файлах виджета ExtJS? Я сделал новые поля, но у меня все начинают помечаться в модальном окне под полями «Это поле обязательно для заполнения.»
Нужно чтобы помечалось поле name, остальные были свободны для добавления:
Нужно чтобы помечалось поле name, остальные были свободны для добавления:
{
xtype: 'textfield',
fieldLabel: _('sonesites_item_name'),
name: 'name',
id: config.id + '-name',
anchor: '99%',
allowBlank: false,
width: '95%',
}, {
xtype: 'textfield',
fieldLabel: _('sonesites_item_domain'),
name: 'domain',
id: config.id + '-domain',
anchor: '99%',
allowBlank: false,
width: '95%',
},
Если я не ошибаюсь,, то это раньше делалось добавлением какого-то параметра в extjs, но вот какого я не помню :( Ошибка Tickets после обновления MODX 2.6.4
При добавлении тикета через фронтенд, возникла проблема с созданием самого тикета. Во первых URI сохранился как /topics/%id-kakoy-to-text
Пропали все данные связанные с количеством просмотров, избранное и т.д. Все эти элементы неактивны и ничего не выводят.
После чего созданный тикет при переходе выдаёт 500 ошибку.
В админке список тикетов не подгружается.
Раньше проблем замечено не было, в эту категорию ранее добавлялось всё без проблем.
Может кто-нибудь подсказать в чём дело?
Пропали все данные связанные с количеством просмотров, избранное и т.д. Все эти элементы неактивны и ничего не выводят.
После чего созданный тикет при переходе выдаёт 500 ошибку.
В админке список тикетов не подгружается.
Раньше проблем замечено не было, в эту категорию ранее добавлялось всё без проблем.
Может кто-нибудь подсказать в чём дело?
Новый способ оплаты для minishop2 (Stripe)
7 2 500
Всем привет! Ищем исполнителя на написание дополнительного способа оплаты (Stripe) для miniShop2.
Вот их сайт stripe.com/
Система интегрирована в WooCommerce (плагин для Wordpress), ещё видел данный способ оплаты в компоненте для MODX от ModMore SimpleCart.
У системы есть API, через которое и нужно будет дёргать по JSON данные.
P.S. Данный компонент может популиризировать MODX, а также miniShop2 в Европе. К примеру в Германии, через него можно оплачивать с кредитных карт и разных европейских банковских систем типа giropay.
Пишите в скайп sequel.one или на почту admin@sequel.one
Вот их сайт stripe.com/
Система интегрирована в WooCommerce (плагин для Wordpress), ещё видел данный способ оплаты в компоненте для MODX от ModMore SimpleCart.
У системы есть API, через которое и нужно будет дёргать по JSON данные.
P.S. Данный компонент может популиризировать MODX, а также miniShop2 в Европе. К примеру в Германии, через него можно оплачивать с кредитных карт и разных европейских банковских систем типа giropay.
Пишите в скайп sequel.one или на почту admin@sequel.one