vectorserver

vectorserver

С нами с 12 декабря 2018; Место в рейтинге пользователей: #44
vectorserver
08 ноября 2024, 06:31
0
Можно и в консоли только кнопочку руками придется нажимать, одна итерация 50 ресурсов)

По второму вопросу не скажу, не вникал)
vectorserver
11 сентября 2024, 11:11
0
Подтверждаю все работает MODX Revolution 2.8.7-pl, PHP Version 7.4.33!
vectorserver
09 сентября 2024, 09:22
0
Ошибка 23000 с кодом 1062 и сообщением Duplicate entry '2024' for key 'year' указывает на то, что в таблице modx_stat_page_statistics есть уникальный индекс (или ключ), который уже содержит значение 2024 в поле year. Это значит, что вы пытаетесь вставить запись, которая нарушает уникальность в этом поле.
vectorserver
12 августа 2024, 13:24
0
При импорте блоков из CSV не создает дочерние ресурсы)
vectorserver
08 апреля 2024, 09:41
0
Сергей, спасибо за статью, оптимизировал сниппет выше!
vectorserver
20 марта 2024, 06:45
0
Тоже замучился но у меня форма динамическая инпуты подставляются через JS и хеш не совпадает, сделал такой костыль пока:
В assets/components/ajaxform/action.php
Закомментировал с 25 по 27 строку проверку
$_REQUEST['af_action']
Кому лень вот готовый код (костыль):
<?php
/** @var modX $modx */
define('MODX_API_MODE', true);
require_once dirname(dirname(dirname(dirname(__FILE__)))) . '/index.php';
$modx->getService('error', 'error.modError');
$modx->setLogLevel(modX::LOG_LEVEL_ERROR);
$modx->setLogTarget('FILE');

// Switch context if need
if (!empty($_REQUEST['pageId'])) {
    if ($resource = $modx->getObject('modResource', (int)$_REQUEST['pageId'])) {
        if ($resource->get('context_key') != 'web') {
            $modx->switchContext($resource->get('context_key'));
        }
        $modx->resource = $resource;
    }
}

/** @var AjaxForm $AjaxForm */
$AjaxForm = $modx->getService('ajaxform', 'AjaxForm', $modx->getOption('ajaxform_core_path', null,
        $modx->getOption('core_path') . 'components/ajaxform/') . 'model/ajaxform/', array());

if (empty($_SERVER['HTTP_X_REQUESTED_WITH']) || $_SERVER['HTTP_X_REQUESTED_WITH'] != 'XMLHttpRequest') {
    $modx->sendRedirect($modx->makeUrl($modx->getOption('site_start'), '', '', 'full'));
} /*elseif (empty($_REQUEST['af_action'])) {
    echo $AjaxForm->error('af_err_action_ns');
}*/ else {
    echo $AjaxForm->process($_REQUEST['af_action'], array_merge($_FILES, $_REQUEST));
}

@session_write_close();
vectorserver
27 декабря 2023, 06:48
+2
Типо того:
<ul>
    <?php
    $contexts = $modx->getCollection('modContext', array('key:NOT IN' => array('mgr')));
    foreach ($contexts as $context) {
        $contextName = $context->get('key');
        $contextUrl = $modx->makeUrl('[[*id]]', '', $contextName);
        echo "<li><a href='{$contextUrl}'>{$contextName}</a></li>";
    }
    ?>
</ul>
vectorserver
27 декабря 2023, 06:36
0
Попробуй напрямую закинуть запрос через метод $modx->query

$sql = "SELECT * FROM ваша_таблица WHERE (width + length) <= 1000 AND (length - width) >= 500";
$result = $modx->query($sql);
$rows = $result->fetchAll(PDO::FETCH_ASSOC);
vectorserver
18 декабря 2023, 07:57
0
дело может быть еще в плагине MinifyX, он отрубает www.google.com/recaptcha/api.js?onload=ReCaptchaCallbackV3
Временно сделал так в сниппете rcv3_html
<?php
$public = $modx->getOption('formit.recaptcha_public_key');
$action = $action ?: 'ajaxform';
$js = "";
if (!$modx->getPlaceholder('rcv3_initialized')) {
    $js.='<script src="https://www.google.com/recaptcha/api.js?onload=ReCaptchaCallbackV3&render=' . $public . '" async></script>';
    $js.='
        <script>
            var ReCaptchaCallbackV3 = function() {
                grecaptcha.ready(function() {
                    grecaptcha.reset = grecaptchaExecute;
                    grecaptcha.reset();
                });
            };
            function grecaptchaExecute() {
                grecaptcha.execute("' . $public . '", { action: "' . $action . '" }).then(function(token) {
                    var fieldsToken = document.querySelectorAll("[name =\'g-recaptcha-response\']");
                    Array.prototype.forEach.call(fieldsToken, function(el, i){
                        el.value = token;
                    });
                });
            };
            // обновляем капчу каждую минуту
            setInterval(function() {
                grecaptcha.reset();
            }, 60000);
        </script>
    ';
    $modx->setPlaceholder('rcv3_initialized', 1);
}

$output = '
    <span class="error_g-recaptcha-response error">' . $error . '</span>
    <input type="hidden" name="g-recaptcha-response">
';

return $js.$output;
vectorserver
17 ноября 2023, 20:21
0
SQL
TRUNCATE TABLE my_table;
vectorserver
17 ноября 2023, 20:13
1
+1
Создаешь сниппет mod_image
<?php

/* @var modX $modx*/
/* @var $input*/


// Создаем объект DOMDocument
$dom = new DOMDocument();


// Загружаем HTML-код
$html = $input;
//$dom->loadHTML($html);
$dom->loadHTML(mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8'));


// Получаем все элементы <img>
$xpath = new DOMXPath($dom);
$images = $xpath->query("//img");

foreach ($images as $image) {
    // Получаем старый путь из атрибута 'src'
    $oldSrc = $image->getAttribute('src');
    $new_path = $modx->runSnippet('phpthumbof',['input'=>$oldSrc,'options'=>'w=0&h=800&zc=0']);
    // Заменяем значение атрибута 'src'
    $image->setAttribute('src', $new_path);


    // Получаем родительский элемент <a> и добавляем атрибут 'href' с значением $oldSrc
    $parentLink = $image->parentNode;
    if ($parentLink->nodeName === 'a') {
        $parentLink->setAttribute('href', $oldSrc);
    } else{

        // Создаем тег a
        $a = $dom->createElement('a');
        $a->setAttribute('href', $oldSrc);

        $a->setAttribute('data-fancybox', 'gal');
        $a->setAttribute('class', 'pointer img-fluid');
        $image->parentNode->replaceChild($a, $image);
        $a->appendChild($image);
    }

    if(!$image->getAttribute('title')){
        $image->setAttribute('title', 123);
        $image->setAttribute('alt', 'Рисунок');
    }

}

// Получаем обновленный HTML-код
$content_new = $dom->saveHTML();


return $content_new;
и потом используй
{$_modx->resource.content | replace : '<h3>' : '<h3 class="title-dec">' | mod_image}
vectorserver
28 июля 2023, 08:53
0
[[PdoPage?
  &tpl=`@INLINE [[+pagetitle]]`
  &sortby=`{"id":"ASC"}`
  &limit=`0`
  &where=`{"album":1}`
  &class=`galAlbumItem`
  &loadModels=`gallery`
  &select=`{
    "galAlbumItem": "*",
    "galItem": "*"
  }`
  &leftJoin=`{
    "galItem":{"class":"galItem", "on":"galItem.id = galAlbumItem.item"}
  }`
]]
vectorserver
28 марта 2023, 20:16
+1
Вот только дошло до меня оно!)
vectorserver
21 марта 2023, 08:10
+1
После <?php пропиши, error_reporting(0);, а по хорошему в php8 нужно указывать типизацию!

<?php
error_reporting(0);
if ($modx->context->get('key') !== 'mgr') {
///code
}
vectorserver
25 января 2023, 09:06
0
За YouTube Shorts, отдельный котёл в аду вас ждет!)))
vectorserver
24 января 2023, 06:22
0
Думаю дорохо за Twitter Bootstrap в редизайне color scheme)))
Сделай цену в 500р, я уверен ты больше заработаешь!)
vectorserver
16 января 2023, 12:05
1
+1
Сорян нужное указывать
{var $count_pub+=1}
)))
{var $count_pub = 0}
{var $plus = [
    ["published" => 1,"name"=>"dsdsds"],
    ["published" => 1,"name"=>"xdsdsds"],
]}

{if $plus}
    {foreach $plus as $idx => $item}
       {if $item.published ==1}
            {var $count_pub+=1}
            {$item.name}
        {/if}
    {/foreach}
    RETURN COUNT: {$count_pub}
 {/if}
vectorserver
12 декабря 2022, 07:52
1
+1
Как писал выше Артур!
Создай сниппет к примеру contextKeys:
<?php
/* @var modX $modx */
/* @var modContext $ctxs */
$ctxs_obj = $modx->getCollection('modContext', array('key:!=' => "mgr"));
$ctxs = [];
if ($ctxs_obj) {
    foreach ($ctxs_obj as $ctx) {
        $ctxs[] = $ctx->key;
    }
}

return implode(",", $ctxs);
Далее впихивай его в pdoSitemap
[[!pdoSitemap?
    &tpl=`@INLINE [[+url]][[+date]]`
    &where=`{"hidemenu":0}`
    &context=`[[contextKeys]]`
]]