Евгений Webinmd
С нами с 07 января 2013; Место в рейтинге пользователей: #23Как я расширил стандартную таблицу пользователей
В последнее время довольно часто приходится делать различные стартапы на заказ, суть которых сводится к платному сервису, с регистрацией, личным кабинетом, ну и как следствие каталогом пользователей, представляющих ту или иную услугу.
Обычно использую office, который обеспечивает готовый личный кабинет из коробки с минимальными усилиями, он же позволяет сохранять все в базу, пользователей. Но вот беда, полей катастрофически не хватает. Логичным решением было создавать страницы для каждого пользователя, и добавлять сколько угодно TV. Так я и делал, но решил заморочиться и не дублировать страницы, а расширить таблицу пользователей и работать с ней напрямую, как с ресурсом.
Вот что я сделал:
Обычно использую office, который обеспечивает готовый личный кабинет из коробки с минимальными усилиями, он же позволяет сохранять все в базу, пользователей. Но вот беда, полей катастрофически не хватает. Логичным решением было создавать страницы для каждого пользователя, и добавлять сколько угодно TV. Так я и делал, но решил заморочиться и не дублировать страницы, а расширить таблицу пользователей и работать с ней напрямую, как с ресурсом.
Вот что я сделал:
[modImporter] 1.3
Приветствую сообщество! Давненько не было новостей про modImporter, поэтому выкладываю небольшой обзор последних изменений.
cityFields. Города, информация и цены для каждого
Представляю вам небольшой полезный компонент под названием cityFields. На данный момент его возможности скромны:
- Добавление списка городов.
- Добавление уникальной информации для каждого города.
- Управление ценами товаров miniShop2 для каждого города.
Список городов и управление им
У компонента имеется страница, на которой вы можете управлять списком городов, добавлять, изменять и удалять их, а также включать и отключать города.Скрипт спамминга в вк группы
В общем ситуация такая, завел я свой сервер RUST. И покопавшись немного в дебрях ВК понял, что есть группы до потолочка забитые постами о серверах RUST. Как честный гражданин решил немного попиарить свой сервер и покидал посты на стенку сообществ. Через время я понял что это достаточно скучное дело. И реши как всегда решить автоатизировать, накидав небольшой скриптец постинга в кучу групп вк. Сказано, сделано. А потом подумал, а почему бы не поделиться своей наработкой с другими modx разработчиками? В общем держите скрипт сниппета postingVk (в приницпе можно постить и на группу сообщества).
Cron и работа с modx
Приветствую!
Задача сама простая, есть параметр 'counterQuote'. Нужно получать его значение и увеличивать на 1 каждый день. Крон работает норм, отчеты о работе приходят, в них весь «index.php», но нужного результата нет.
Что еще надо сделать, чтобы заработало?
Задача сама простая, есть параметр 'counterQuote'. Нужно получать его значение и увеличивать на 1 каждый день. Крон работает норм, отчеты о работе приходят, в них весь «index.php», но нужного результата нет.
//Подключение
require '---- /public_html/index.php';
//Получение параметра и увеличение на 1
$counterQuote = $modx->getObject('modSystemSetting',array('key' => 'counterQuote'));
$counterQuote->set('value',$counterQuote->get('value')+1);
$counterQuote->save();
//Обновление кеша
$cacheRefreshOptions = array( 'system_settings' => array() );
$modx->cacheManager->refresh($cacheRefreshOptions);
Ошибок не выдает, но и не увеличивается. Как сниппет в модх запускать, то все здорово.Что еще надо сделать, чтобы заработало?
[tvSuperSelect] 1.1.1 с новыми сниппетами для вывода
[tvSuperSelect] Тип TV: автозаполняемый список из ms2, для реализации тегов
Это такой тип ТВ поля, в который можно вбивать значения «на ходу». Другими словами, мы не указываем «Возможные значения» при редактировании ТВ, а вбиваем эти значения в это поле на странице редактирования ресурса.
Очень удобно создавать из такого поля «Теги» на сайте, потому что помимо добавления значений «на ходу», у нас есть возможность выбрать уже используемые значения из других ресурсов.
Перенос фото товаров из TV в галерею miniShop2
Постановка задачи: был интернет магазин, где товары — обычные ресурсы, а изображения — TV поля (в моем примере 5 штук). Необходимо сделать товары типа msProduct, а изображения перенести в стандартную галерею miniShop2.
Небольшой скрипт, решающий вторую часть задачи, ниже. (первая часть задачи решается примерно так)
Что он делает? Скрипт берет все записи с типом msProduct, и копирует изображения из TV в галерею miniShop2.
Надеюсь кому-нибудь будет полезным (скрипт не 100% универсальный, подгоняйте под себя! и да, я запускаю его из Console, если у вас просто php файл, то необходимо сначала авторизоваться в админке через API).
Небольшой скрипт, решающий вторую часть задачи, ниже. (первая часть задачи решается примерно так)
Что он делает? Скрипт берет все записи с типом msProduct, и копирует изображения из TV в галерею miniShop2.
Надеюсь кому-нибудь будет полезным (скрипт не 100% универсальный, подгоняйте под себя! и да, я запускаю его из Console, если у вас просто php файл, то необходимо сначала авторизоваться в админке через API).
Скрипт импорта CSV в базу данных в формате JSON
Доброго времени суток!
Написал скрипт, который будет запускаться по крону, для обновления информации на страницах из
CSV файлов, которые располагаются на других сайтах.
Скрипт вроде работает, но хочется убедиться, что всё правильно с точки зрения безопасности/оптимизации и прочего. Поэтому обращаюсь к сообществу с целью исправления ошибок, если таковые имеются.
Написал скрипт, который будет запускаться по крону, для обновления информации на страницах из
CSV файлов, которые располагаются на других сайтах.
Скрипт вроде работает, но хочется убедиться, что всё правильно с точки зрения безопасности/оптимизации и прочего. Поэтому обращаюсь к сообществу с целью исправления ошибок, если таковые имеются.
<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
define('MODX_API_MODE', true);
require_once dirname(dirname(__FILE__)).'/core/config/config.inc.php';
require_once MODX_BASE_PATH . 'index.php';
$q = $modx->newQuery('modResource');
$q->where(array('parent' => 6,'published'=>1,'csvlink:!=' => ''));
$q->select('id,csvlink');
if ($q->prepare() && $q->stmt->execute()) {
while ($rowss = $q->stmt->fetch(PDO::FETCH_ASSOC)) {
$array = array($rowss['id'] => $rowss['csvlink']);
if (($handle = fopen($rowss['csvlink'], 'r')) === false) {
die('Error opening file');
}
$headers = fgetcsv($handle, 0, ';');
$promo = array();
while ($row = fgetcsv($handle, 0, ';')) {
$promo[] = array_combine($headers, $row); // $promo[$row['0']] для выноса ID в Индекс массива
}
fclose($handle);
$promo_json = json_encode($promo);
$resource = $modx->getObject('modResource', $rowss['id']);
$resource->set('promo_json', $promo_json);
$resource->save();
$modx->cacheManager->refresh();
}
};