Всего 123 797 комментариев

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);
Николай Савин
25 июля 2023, 08:33
1
0
Пройдите в системные настройки. Найдите там настройку extension_packages. Именно она отвечает за инициализацию пакетов. Скорее всего в ней осталась запись о пакете hybridauth. Отсюда и попытки инициировать отсутствующий пакет. Удалите оттуда запись — и будет вам счастье.
ВНИМАНИЕ. Там формат JSON. Удаляйте кусочек про hybridauth аккуратно, чтобы не сломать записи о других пакетах.
Алексей Шумаев
24 июля 2023, 20:24
0
Случайно наткнулся на старый запрос.
У кого такая ситуация будет — смотрите сразу таблицы базы данных: скорее всего при переносе сайта потеряны индексы и ключи таблиц. Отсюда все проблемы.