Vladimir
С нами с 25 июня 2021; Место в рейтинге пользователей: #285Как добавить допустим класс тегу(html тегу), допустим к элементу [[*pagetitle]] при парсинге?
Хочу добавить класс каждому тегу который выставлен на страницу допустим
<div class="pr">[[*pagetitle]]</div>
добавить класс так <div class="pr pagetitle_parsed">[[*pagetitle]]</div>
Пробовал так<?php
switch ($modx->event->name) {
case 'OnParseDocument':
if($modx->user->isMember('Administrator')){
$content = $modx->documentOutput;
$tags = array();
$collected = $modx->parser->collectElementTags($content, $tags, '[[', ']]', array('*'));
// $modx->log(1, var_dump($tags));
foreach($tags as $tag){
$modx->log(1, var_dump($tag));
break;
}
// $modx->log(1, var_dump($collected));
}
break;
Но даже не могу увидеть что за тег, имя и тд, мне просто выводится цифра 26 Как получить html через пост запрос на плагин?
Хочу получить html шаблона по клику допустим, сделал плагин поставил обработчик OnHandleRequest
Проверяю на пост и так далее, есть так же метод получения контента из шаблона, но как вернуть его? return не работает, echo и die() тоже, либо ошибка либо какой-то бред.
Контент получаю так
Возвращаю ответ от функции выше так
Проверяю на пост и так далее, есть так же метод получения контента из шаблона, но как вернуть его? return не работает, echo и die() тоже, либо ошибка либо какой-то бред.
Контент получаю так
$retrivedObject->getContent();
— Контент правильный проверял.Возвращаю ответ от функции выше так
return json_encode(array('status' => true, 'msg' => "Succesfuly retrieved data from '{$objectName}' with search params as '{$searchParams}'", 'result' => $result), JSON_UNESCAPED_UNICODE);
Где $result это просто список. Как создать скидку для товаров с опред брендом в msDiscount ?
Есть список брендов, бред указан в опциях товара, как сделать именно для них скидку через msDiscount?
Код ниже уже готовый, вопрос решён. Нужно будет вам создать ваши бренды в группе ресурсов обязательно указать все контексты, затем записать их в словарь как ниже, и всё это запустить в пакете под названием «Консоль»
При условии что у вас бренд как у меня находится в опции товара, если нет то код ниже нужно будет переделать а именно первую часть с поиском опции.
Код ниже уже готовый, вопрос решён. Нужно будет вам создать ваши бренды в группе ресурсов обязательно указать все контексты, затем записать их в словарь как ниже, и всё это запустить в пакете под названием «Консоль»
При условии что у вас бренд как у меня находится в опции товара, если нет то код ниже нужно будет переделать а именно первую часть с поиском опции.
<?php
$brensList = array('NOMAD','Dominator','АкТех','Kainar');
$q=$modx->newQuery('msProductOption', array('key:=' => 'brand', 'value:IN' => $brensList));
$q->prepare();
$q->stmt->execute();
$res = $q->stmt->fetchAll(PDO::FETCH_ASSOC);
$brendsGroups = array(
'NOMAD' => 79,
'Dominator' => 80,
'АкТех' => 81,
'Kainar' => 82
);
$productWithoutGroup = 103; // Айди группы ресурсов что нет в списке выше.
foreach ($res as $k => $v) {
$currentProductBrand = $v['msProductOption_value'];
$docId = $v['msProductOption_product_id'];
$newGroup = $brendsGroups[$currentProductBrand];
if(!$newGroup){
$newGroup = $productWithoutGroup;
}
$resource = $modx->getObject('modResource', $docId);
if($resource){
if(!$resource->isMember($newGroup)){
$resource->joinGroup($newGroup);
}
}
}
Как вывести цену со скидкой в карточке товара msDiscount ?
msDiscount выводит в каталоге, корзине всё норм, но в карточке товара не выводит, в доках не нашёл как вывести цену со скидкой в карточке товара
Код ниже уже готовый, проверенный, работает отлично по группам, по скидкам и так далее, выводит именно цену товара, а не саму скидку, для вывода самой скидкой нужно воспользоваться тем что написано в доках
Код ниже уже готовый, проверенный, работает отлично по группам, по скидкам и так далее, выводит именно цену товара, а не саму скидку, для вывода самой скидкой нужно воспользоваться тем что написано в доках
<?php
/** @var msDiscount $msDiscount */
/** @var msDiscount $price */
/** @var pdoTools $pdoTools */
if(empty($price)){
return '';
}
$pdoTools = $modx->getService('pdoTools');
$msDiscount = $modx->getService('msDiscount');
$date = $pdoTools->getStore('msd_date');
$usergroups = array_keys($msDiscount->getUserGroups($modx->user->id));
$sales = !empty($date)
? $msDiscount->getSales($date, true)
: $msDiscount->getSales();
if (empty($sale)) {
$sale = $pdoTools->getStore('msd_sale');
}
if (!empty($sale)) {
$tmp = array_map('trim', explode(',', $sale));
foreach ($sales as $id => $sale) {
if (!in_array($id, $tmp)) {
unset($sales[$id]);
}
}
}
if (!empty($row) && is_array($row)) {
$mode = 'prepare';
if (!empty($row['id'])) {
$id = $row['id'];
}
}
else {
$mode = 'standalone';
if (!empty($frontend_css)) {
$frontend_css = str_replace('[[+assetsUrl]]', $msDiscount->config['assetsUrl'], $frontend_css);
$modx->regClientCSS($frontend_css);
}
if (!empty($frontend_js)) {
$frontend_js = str_replace('[[+assetsUrl]]', $msDiscount->config['assetsUrl'], $frontend_js);
$modx->regClientScript($frontend_js);
}
if (empty($id)) {
$id = $modx->resource->id;
}
}
$remains = $discount = 0;
if (!empty($id) && !empty($sales)) {
foreach ($sales as $sale) {
// Check user groups
if (!empty($sale['users'])) {
$required = array();
foreach ($sale['users'] as $gid => $type) {
if ($type == 'out' && in_array($gid, $usergroups)) {
unset($sales[$idx]);
continue(2);
}
if ($type == 'in') {
$required[] = $gid;
}
}
if (!empty($required) && !array_intersect($required, $usergroups)) {
unset($sales[$idx]);
continue;
}
}
// Check product groups
if (!empty($sale['products'])) {
$groups_in = $groups_out = array();
foreach ($sale['products'] as $gid => $type) {
if ($type == 'out') {
$groups_out[] = $gid;
unset($sale['products'][$gid]);
}
else {
$groups_in[] = $gid;
}
}
}
if (!empty($groups_out) || !empty($groups_in)) {
$ids = $modx->getParentIds($id);
$ids[] = $id;
$q = $modx->newQuery('msCategoryMember', array('product_id' => $id));
$q->select('category_id');
$tstart = microtime(true);
if ($q->prepare() && $q->stmt->execute()) {
$modx->queryTime += microtime(true) - $tstart;
$modx->executedQueries++;
if ($tmp = $q->stmt->fetchAll(PDO::FETCH_COLUMN)) {
$ids = array_merge($ids, $tmp);
}
}
$ids = array_unique($ids);
$where = count($ids) > 1
? array('document:IN' => $ids)
: array('document' => $ids[0]);
$q = $modx->newQuery('modResourceGroupResource', $where);
$q->select('document_group');
$tstart = microtime(true);
if ($q->prepare() && $q->stmt->execute()) {
$modx->queryTime += microtime(true) - $tstart;
$modx->executedQueries++;
$groups = $q->stmt->fetchAll(PDO::FETCH_COLUMN);
if (!empty($groups_out) && array_intersect($groups_out, $groups)) {
continue;
}
elseif (!empty($groups_in) && !array_intersect($groups_in, $groups)) {
continue;
}
}
}
// Product match
$tmp_remains = ($sale['ends'] != '0000-00-00 00:00:00')
? strtotime($sale['ends']) - time()
: 0;
if (strpos($sale['discount'], '%') !== false && (empty($discount) || strpos($discount, '%') !== false)) {
if ($sale['discount'] > $discount) {
$discount = $sale['discount'];
$remains = $tmp_remains;
}
}
elseif (is_numeric($sale['discount']) && is_numeric($discount)) {
if ($sale['discount'] > $discount) {
$discount = $sale['discount'];
$remains = $tmp_remains;
}
}
else {
$discount = $sale['discount'];
$remains = $tmp_remains;
}
}
}
if($discount && $remains){
return (((int)$price * (100 - (int)$discount )/100));
}
return '';
Как зарегистрировать js скрипт при рендере страницы?
Пытался так, но как я понял это работает для снипетов, но сниппет не подходит, нужно именно подключить js при загрузке страницы.
и модифицировать Html
switch ($modx->event->name) {
case 'OnWebPagePrerender':
//$modx->regClientScript('assets/somefile.js');
&$modx->regClientScript('assets/somefile.js');
break;
}
Или придётся делать через OnWebPagePrerenderи модифицировать Html
$txt = &$modx->resource->_output;
Как получить контент страницы перед рендером всех тегов и вызовов?
Как получить страницу с тегами в таком состоянии [[*id]] перед рендером?, чтобы что-то заменить.
Пробовал так, но никак не могу понять как получить весь контент страницы
Пробовал так, но никак не могу понять как получить весь контент страницы
switch ($modx->event->name) {
case 'OnWebPageInit':
$output = get_class_methods($modx);
$modx->log(1, print_r($output), 'HTML');
break;
}
И так
$output = &$modx->resource
&$modx->resource->_output;
Как оптимизировать все картинки на сайте разом?
У меня есть плагин который с помощью phpthumb оптимизирует при загрузке, его ведь можно превратить чтобы он оптимизировал все картинки по запуску, как получить список все картинок что используются на сайте?
<?php
$fullPath = $source->getBases() ['pathAbsolute'] . $directory;
foreach ($files as $file)
{
if (strripos($file['type'], 'image') === false || $file['type'] == 'image/svg+xml')
{
return;
}
$name = $file['name'];
$pathToImage = $fullPath . $name;
if (exif_imagetype($pathToImage) == IMAGETYPE_JPEG)
{
$params = array(
'w' => 1920,
'f' => 'jpeg',
'q' => 80,
);
}
elseif (exif_imagetype($pathToImage) == IMAGETYPE_PNG)
{
$params = array(
'w' => 1920,
'f' => 'png',
'q' => 80,
);
}
elseif (exif_imagetype($pathToImage) == IMAGETYPE_GIF)
{
return;
}
$phpThumb = $modx->getService('modphpthumb', 'modPhpThumb', MODX_CORE_PATH . 'model/phpthumb/', array());
$phpThumb->setSourceFilename($pathToImage);
foreach ($params as $k => $v)
{
$phpThumb->setParameter($k, $v);
}
if ($phpThumb->GenerateThumbnail())
{
if (!$phpThumb->renderToFile($pathToImage))
{
$modx->log(1, 'Ошибка сохранения изображения в [' . $pathToImage . ']');
}
}
else
{
$modx->log(1, print_r($phpThumb->debugmessages, 1));
}
}
Как получить контент шаблона?
Как получить контент шаблона? Желательно через api modx'a, или придётся через sql?
Как запустить скрипт php через simpleQueue?
Вообще непонятно, документация как всегда легкая напоминалка для разраба.
Так же пытался выполнить
Так же пытался выполнить
$sq = $modx->getService('simplequeue');
как указано в доках, выдаёт ошибку что не может загрузить.Could not load class: simplequeue from simplequeue.
Problem getting service simplequeue, instance of class simplequeue, from path
Не выводится своё значения из из своего словаря, как исправить?
Создал папку в core/components/sitetranslation/lexicon/ru/default.inc.php
папка «компонент» sitetranslation содержит только папку lexicon а в ней только папка ru а в ней только 1 файл default.inc.php
с таким значением
cultureKey такой же как и название папки ru контекст web.
папка «компонент» sitetranslation содержит только папку lexicon а в ней только папка ru а в ней только 1 файл default.inc.php
с таким значением
<?php
$files = scandir(dirname(__FILE__));
foreach ($files as $file) {
if (strpos($file, 'msp.') === 0) {
@include_once($file);
}
}
$_lang['sts_modal_form_title'] = 'Хотите получить доступ? Заполните анкету';
Затем создал пространство имён в modx, в словаре всё появилось могу делать записи, те записи что делаю в файлах на хосте там отображаются, но при попытке вывести не выводит.{'sts_modal_form_title' | lexicon}
Получаю просто sts_modal_form_title без переводаcultureKey такой же как и название папки ru контекст web.