Всего 123 801 комментарий

OlegSh
25 июля 2023, 21:36
0
Николай, спасибо. Вы мне очень помогли. Дело в том, что я 30 лет работал журналистом и редактором, последние 15 лет главредом в онлайн СМИ, а программированием никогда не занимался. Этот сайт мой личный, сделан в 2015 году программистом, который сказал, что он лучший в России по MODX)), кажется его звали Николай Леонов. Смутно припоминаю, что он мне говорил, что именно в этом проекте (это тиражируемый сайт — на его основе работало еще три онлайн-медиа, сейчас закрыты) он выдумал какой -то ловкий ход связанный с Тикетами и Артиклами. Потом Коля куда-то пропал.
На сайте было около 1000 статей, а весной этого года я стал этот сайт снова развивать как контетный. И мне стало интересно не только контент, но и код) Это как волшебство. На FL пошел чтобы найти исполнителей убрать ошибки, но пока искал — выяснил сам в чатах и в беседах с GPT, что проблема перегрузки БД и сайта на которые ругался хостер Бегет может быть связана с настройками кеша — и действительно, везде стояло значение 0! Поменял на 7200, 3600 и даже 21400 — вроде нагрузка резко упала.
Может вы возьметесь за вознаграждение убрать эту ошибку? Хотя сайт вроде работает, но ошибка напрягяет. Еще раз спасибо за помощь.
Сергей С
25 июля 2023, 20:06
0
Нашел причину почему не грузит с удаленного сервера фид. importfeed.class.php 76 строка опечатка feelUrl
Николай Савин
25 июля 2023, 18:29
0
Ну вы даете. Зачем идти на FL если есть отдельный тематический форум и большой телеграм чат (в шапке адрес)
GPT написал полную чушь. Не нужно им пользоваться. Он не понимает MODX.

Речь идет действительно о разных компонентах, которые не пересекаются. Tickets и Article. Но я не встречал такой проблемы и не подскажу что делать. Нужно внутри проекта смотреть
Dan
Dan
25 июля 2023, 17:01
0
А что именно не работает? Ошибки в консоли есть? По клику что происходит? Если открыть исходный код на сайте, там изображения есть в data-photos у ссылок?
OlegSh
25 июля 2023, 16:40
0
Огромная благодарность! Ошибки исчезли. Николай, вы волшебник. Спасибо. Оказывается так просто, но и так сложно, ведь это надо вса знать! Я перелопатил все файлы, а «спецы» с FL-ру не смогли помочь, только сломали сайт пришлось делать бэкап)

Ошибки про погоду и валюту исчезли. Осталась только самая лютая: [2023-07-25 16:32:55] (ERROR @ /home/o/olegsh6w/dopross.ru/core/xpdo/om/xpdoobject.class.php: 344) Instantiated a derived class Ticket that is not a subclass of the requested class Article.

Но тут я уже стесняюсь вас спрашивать, кажется это все сложно в реализации.Порылся в файлах и директориях, про которые GPT пишет, ничего не понял.

Чат GPT написал, что Ошибка «Instantiated a derived class Ticket that is not a subclass of the requested class Article» означает, что произошла попытка создать экземпляр класса Ticket, который является производным (наследником) от класса Article. Однако, класс Ticket не является подклассом класса Article, как ожидалось.

Возможные причины и решения:

1. Убедитесь, что классы Ticket и Article правильно определены и располагаются в соответствующих файлах.

2. Проверьте, что в коде правильно указано наследование класса Ticket от класса Article. Убедитесь, что в классе Ticket используется ключевое слово «extends» с указанием класса-родителя Article.

3. Если классы Ticket и Article находятся в разных пространствах имен (namespaces), убедитесь, что пространство имен класса Ticket правильно указано и соответствует ожидаемому пространству имен.

4. Если классы Ticket и Article представлены в виде плагинов или расширений для какой-либо платформы, убедитесь, что они правильно зарегистрированы и конфигурированы в системе.

Тщательно проверьте код и конфигурацию, чтобы убедиться, что классы Ticket и Article определены и настроены правильно, а также что наследование между ними указано верно.

Вопрос: А в каких файлах в MODX могут быть классы Ticket и Article?

В MODX классы Ticket и Article могут находиться в файлах с расширением ".php" в следующих расположениях:

1. /core/components/{имя_компонента}/model/{имя_плагина}/{имя_класса}.php

— Компоненты MODX обычно содержат модели (models), которые могут содержать классы для различных объектов, таких как «статьи» (Article). Поэтому класс Article может быть определен в файле, который находится внутри папки «model» с именем плагина.

2. /core/model/modx/{имя_класса}.php

— В папке "/core/model/modx" обычно находятся базовые классы MODX, которые отвечают за базовую функциональность системы. Поэтому класс Ticket может быть определен в файле, который расположен внутри папки «modx».

3. /assets/lib/{имя_плагина}/{имя_класса}.php

— Если вы используете сторонние плагины или библиотеки, классы Ticket и Article могут быть размещены в папке "/assets/lib" в соответствующей подпапке с именем плагина.

Обратите внимание, что вышеуказанные расположения файлов являются типичными для MODX, но могут отличаться в зависимости от конкретной конфигурации или структуры вашего проекта. Рекомендуется просмотреть структуру файлов в вашей установке MODX, чтобы точно определить местоположение классов Ticket и Article.
OlegSh
25 июля 2023, 16:22
0
удалять боюсь, чтобы сайт не сломать) да, это сниппет все верно, извините
Николай Савин
25 июля 2023, 16:20
0
1. А зачем комментировать если вызов не нужен? Не проще удалить?
2. Вы неправильно комментируете
Достаточно поставить минус после открывающих скобок в вызове вашего сниппета [[
3. В чанке не может быть PHP кода — это наверное сниппет
OlegSh
25 июля 2023, 16:16
0
Добрый день.
в header так:

!--&element=`current_weather`-->
!--&cacheExpires=`7200`-->
!--&cacheElementKey=`weather`-->
!--&cacheKey=`dg_cache`]]-->

а сам чанк так:
//<?php
//$json = file_get_contents('https://api.openweathermap.org/data/2.5/weather?q=Moscow&mode=json&lang=ru&units=metric&APPID=d0e3687ac0b25562f0e995c81580f565');

 //$weather=$modx->fromJSON($json);

 //echo (intval($weather['main']['temp'])>0?"+".round($weather['main']['temp']):round($weather['main']['temp']))." <img src='https://openweathermap.org/img/w/".$weather['weather'][0]['icon'].".png'>";
Артур Шевченко
25 июля 2023, 16:04
0
Нет, там же вполне определенные тэги, только переписывать.
Дмитрий
25 июля 2023, 15:16
0
Добрый день! Обычный XML не подойдет? Только YML?
Кровельный
25 июля 2023, 14:51
1
0
Как из свойств товара-ресурса записать в одну опцию товара?
Например если 2-3 значения, а 1 ключ, конечно можно использовать вариант в свойствах если там уже есть данные json, как многомерный массив, но мы сделаем тестовую опцию множественный выбор.
  1. Назовём опцию made_from
  2. Заведём в опцию значения (В настройках minishop2), чтобы получились значения:
    • Металла
    • Дерева

    • Вторсырья
    • Текстиля
    • Пластика

    * — не программно, вручную (если программно, то дописывайте код)
  3. Далее выполним:
    <?php
    $key = 'made_from'; // имя опции товара
    $resource = $modx->getObject('modResource', 44);
    $product = $modx->getObject('msProduct', $resource->id);
    //$arr = $resource->get('properties')['technicals']['Детали изготовлены из'];
    $arr = ['Пластика','Вторсырья'];
    $options = $product->loadData()->get('options');
    foreach ($arr as $k => $v) {
        $options[$key][$k] = $arr[$k];
    }
    $product->set('options', $options);
    $product->save();
  4. Готово. Теперь mFilter2 сможет фильтровать по опции. Если необходимо записать или обновить товары, то необходимо завернуть всё в getCollection
biper
25 июля 2023, 14:36
0
ибо вроде как масло масляное получается в нем…
biper
25 июля 2023, 14:20
0
ни фига…: (
логику вроде понимаю… а сам вызов не нужно ничего менять?
<div class="container-fluid">
     <hh>ГАЛЕРЕЯ наших работ</hh><hr>
         <div class="row" style="margin: 0;">
            
[[!GalleryAlbums? &toPlaceholder=`GalleryAlbums` &limit=`0` &albumCoverSort=`rank` &prominentOnly=`1`
&rowTpl=`galAlbumRowWithCoverTpl`&thumbWidth=`400` &thumbHeight=`266` &thumbTpl=`GalItemThumb1` &imageWidth=`900` &imageHeight=`900`]]

[[!Gallery? &album=`[[*galery_name]]` &limit=`0` &checkForRequestTagVar=`1`&sortby=`{"publishedon":"ASC"}`  &toPlaceholder=`Gallery` 
&useCss=`0` &containerTpl=`GalleryAlbumTpl` itemCls=`carousel-item` activeCls=`carousel-item active` &thumbWidth=`400` &thumbHeight=`266` 
&thumbTpl=`GalItemThumb1` &imageWidth=`900` &imageHeight=`900`]]

[[+Gallery:isnot=``:then=`<div class="carousel-inner gallery_pic">[[+Gallery]]</div>`:else=`<ul class="carousel-inner gallery_pic">

[[+GalleryAlbums]]</ul>`]]
           
         </div>
        <p class="con">
         </p>
      </div>
Dan
Dan
25 июля 2023, 13:07
0
В карусели или нет — это никак не влияет. Я бы конечно сделал ajax-подгрузку, но там писанины больше.
biper
25 июля 2023, 13:04
0
спасибо, попробуую :) несколько омрачает что галерея находится в карусели, видимо оттого не совсем получается… постараюсь разобраться
Dan
Dan
25 июля 2023, 12:40
1
0
Если не хотите использовать ajax, то можно сделать так немного закостылить:
1) Немного правите ваш текущий чанк galAlbumRowWithCoverTpl
[[!Gallery?
    &album=`[[+id]]`
    &toPlaceholder=`photos`
    &thumbTpl=`tpl.gallery.image`
]]
<a href="[[+url:is=``:then=`[[+image]]`:else=`[[+url]]`]]" [[+link_attributes]] class="gallery-preview" data-photos="[[+photos:commaSeparate]]">
    [[+image:notempty=`<img src="[[+image]]" [[+cls:notempty=`class="[[+cls]]"`]] alt="[[+title]]" />`]]
</a>
2) Создаете чанк tpl.gallery.image
[[+image_absolute]],
3) Создаете сниппет commaSeparate
<?php
return rtrim($input, ',');
4) Пишете js-код:
$(document).ready(function() {
   $('.gallery-preview').click(function(e) {
        e.preventDefault();
        let photos = [];

        if ($(this).attr('data-photos') && $(this).attr('data-photos') != '') {
            let list = $(this).attr('data-photos').split(',');
            $.each(list,function(i){
                photos.push({href: list[i]});
            });
        }        
        
        $.fancybox.open(photos);
   });
});
OlegSh
25 июля 2023, 10:01
0
Добрый день, Николай! Точно! Была такая запись, удалил, надеюсь, что поможет. Огромное спасибо! Исчезла эта ошибка!
Может еще про погоду и валюту подскажите?! Коды курса валют и погоды на сайте в Header и в чанках закомментировал, кеш везде стоит 7200, но MODX генерирует ошибки: (ERROR @ /home/o/olegsh6w/dopross.ru/core/cache/includes/elements/modsnippet/35.include.cache.php: 51) getCache could not find requested element `current_weather`-->
Дмитрий
25 июля 2023, 09:24
0
У кого-нибудь работает обновление товаров по крону?
раньше были ошибки, прописал абсолютный путь к index.php, после этого пропали, но товары не экспортируются(
prnt.sc/nIKF9XajT9gJ
<?php

define('MODX_API_MODE', true);

$developmentConfig = dirname(dirname(dirname(dirname(dirname(dirname(__FILE__)))))) . '/core/config/config.inc.php';
$productionConfig = dirname(dirname(dirname(dirname(__FILE__)))) . '/config/config.inc.php';

if (file_exists($developmentConfig)) {
    /** @noinspection PhpIncludeInspection */
    require_once $developmentConfig;
} else {
    /** @noinspection PhpIncludeInspection */
    //require_once $productionConfig;
}
/** @noinspection PhpIncludeInspection */
require_once '/home/ert/public_html/index.php';

$modx->getService('error', 'error.modError');
$modx->setLogLevel(modX::LOG_LEVEL_ERROR);
$modx->setLogTarget('FILE');
$modx->error->message = null;

/** @var Sync $Sync */
$Sync = $modx->getService('sync', 'Sync',
    $modx->getOption('sync_core_path', null,
        $modx->getOption('core_path') . 'components/sync/') . 'model/sync/');
$corePath = $modx->getOption('sync_core_path', null, $modx->getOption('core_path') . 'components/sync/');
$modx->lexicon->load('sync:default');

$params = array(
    'service'   => 'moysklad',
    'action'    => 'mgr/mscategory/export',
    'sync_step' => 'sync_init',
);

$response = $Sync->curlExec($params);

//var_dump($response);