Новости Joomla

Компонент Joomla 6: Генератор LLMs.txt.

Компонент Joomla 6: Генератор LLMs.txt.

Компонент Joomla 6: Генератор LLMs.txt.

Ещё один генератор ИИ-файлов llms.txt и llms-full.txt.

Основные особенности/возможности компонента:

  • Генерация по стандарту: Автоматическое создание файла-визитки llms.txt и расширенной версии llms-full.txt с аннотированным списком материалов.
  • Интеллектуальная работа с контентом: Компонент использует мета-описания (Meta Description) из статей и пунктов меню, превращая SEO-настройки сайта в качественный контекст для нейросетей.
  • Просмотреть результат генерации файлов можно сразу в рабочей области компонента. После внесения корректив (через Настройки компонента. При отладке лучше открыть три вкладки в браузере: Настройка — Геренация/Превью — Список Материалов/Категории/Меню.) — проводим перегенерацию, смотрим результат до полной «победы».
  • Автоматизация и безопасность: Синхронизация с sitemap.xml, группировка по категориям и автоматическое создание резервных копий (.bak) при каждой генерации.
  • Гибкое управление: Возможность исключения определенных категорий и/или статей и/или пунктов меню, а также простая настройка через стандартную админпанель Joomla.
  • Подробное руководство/справка: Пошаговая инструкция для пользователя в Настройках компонента для редакторов с базовым знанием администрирования Joomla.

👉 Важно учесть.
1️⃣ Компонент Генератор LLMs.txt изначально составляет базовый список ссылок на основе sitemap.xml и сверяется с ним на предмет: запрета индексации url в robots.txt, тегов noinex/nofollow. Это экономит время на проверку «закрыть от индексации», поскольку компонент генерации Sitemap.xml уже реализовал эту задачу. Посему, формирование ссылок для ИИ имеет комплексный подход, составление грамотного/валидного/релевантного sitemap.xml никто не отменял.

2️⃣ Тексты-описания ссылок формируются из Meta Description com_content (только компонент Материалы) и выбранных пользователем Меню сайта. Важно, чтобы Meta Description были уникальными и релевантными, соответствовали базовому seo. Составленные «на отшибись» Description для ИИ — «не катит» (впрочем, для поисковых систем они тоже «не канали»).

Разработчик - участник нашего сообщества Александр Кузнецов (@newvksan).

Страница расширения

@joomlafeed

#joomla #ии #ai

👩‍💻 WT LLMs для Joomla: llms.txt, llms.json для AI-агентов.

👩‍💻 WT LLMs для Joomla: llms.txt, llms.json для AI-агентов.

Это Joomla-компонент для публикации AI-ready карты сайта и автоматической генерации файлов llms.txt, llms-full.txt и llms.json по концепции llmstxt.org.  Также о концепции llms.txt говорит Google в своей справке Lighthouse. Решение помогает LLM-моделям, AI-агентам, GEO/AI SEO-процессам и внутренним автоматизациям получать структурированные данные о сайте без ручной сборки JSON и Markdown.

С помощью WT LLMs можно:
- создать структурированное описание сайта для AI-агентов;
- управлять профилем сайта, картой интентов и каноническими страницами для этих интентов из админки Joomla;
- генерировать llms.txt и llms.json;
- использовать REST API для автоматического заполнения данных;
- отдавать публичную schema-инструкцию для AI-агентов;

В комплект компонента входит плагин markdown-версии страниц Joomla. Системный плагин Joomla, который добавляет альтернативное Markdown-представление страниц сайта. Он позволяет отдавать содержимое страницы в более чистом текстовом формате, удобном для AI-агентов, LLM, поисковых систем и технических интеграций.
Плагин добавляет в ссылки на AI-файлы.

Пакет подходит для сайтов на Joomla 5+, которым важно сделать контент понятнее для LLM, AI-поиска, ассистентов и будущих систем машинного чтения.

Видео:
- ВК Видео
- RuTube
- YouTube

Ссылки:
Страница расширения
GitHub

@joomlafeed

0 Пользователей и 1 Гость просматривают эту тему.
  • 31 Ответов
  • 14588 Просмотров
*

avantyrist

  • Захожу иногда
  • 228
  • 3 / 0
Атрибуты в functions.js
« : 02.01.2015, 20:38:19 »
Всех с новым годом ! :)
Подскажите пожалуйста  в файле functions.js   где то есть определение ID атрибута ? именно та айдишка которая выделена чёрным шрифтом:

<input type="radio" name="jshop_attr_id[3]"   id="jshop_attr_id37"   value="7" onclick="setAttrValue('3', this.value);" class="checkkkkk">

Замучался мягко говоря, надо скрипт сообразить на добавления класов для label выбраного атрибута, но немагу понять как определить текущий атрибут :((
есть масив такого рода:
for(var id in attr_value){ ....  }
Но он определяет какойто нетот айдишник: ниже показываю какой:

<input type="radio" name="jshop_attr_id[3]"   id="jshop_attr_id37"   value="7" onclick="setAttrValue('3', this.value);" class="checkkkkk">

Помогите плиииз :(  Как распознать  ID  атрибута   id="jshop_attr_id37"   ??
*

avantyrist

  • Захожу иногда
  • 228
  • 3 / 0
Re: Атрибуты в functions.js
« Ответ #1 : 02.01.2015, 22:36:00 »
Напишу что смог сделать: файл  function.js

После функции function reloadAttrValue()

Создал свою функцию:
Спойлер
[свернуть]

и обьявил её в: function reloadAttribSelectAndPrice(id_select) {  
в самом конце добавил:   addattrClass();

Сейчас добавляется клас .checkkkkk для выбранного ИНПУТА, и потом удаляется, если выбранна другая ОПЦИЯ атрибута.
До етого я немного неправильно рассуждал :(
for(var id in attr_value){.....}   - вот ето определяет ID атрибута
а Каким образом определить ID ОПЦИИ   атрибута ? с етим вся загвоздка :(    
Ниже вставлю Код из файла function.js где варится вся каша с атрибутам.   Прошу помощи, самому никак.... :(
Код
function reloadAttribSelectAndPrice(id_select){
    var product_id = jQuery("#product_id").val();
    var qty = jQuery("#quantity").val();
    var data = {};
    data["change_attr"] = id_select;
    data["qty"] = qty;    
    for(var i=0;i<attr_list.length;i++){
        var id = attr_list[i];
        data["attr["+id+"]"] = attr_value[id];
    }
    for(extdatakey in extdataurlupdateattr){
        data[extdatakey] = extdataurlupdateattr[extdatakey];
    }

    if (prevAjaxHandler){
        prevAjaxHandler.abort();
    }

    prevAjaxHandler = jQuery.getJSON(
        urlupdateprice,
        data,
        function(json){
            var reload_atribut = 0;
            for(var i=0;i<attr_list.length;i++){
                var id = attr_list[i];
                if (reload_atribut){
                    jQuery("#block_attr_sel_"+id).html(json['id_'+id]);
                }
                if (id == id_select) reload_atribut = 1;
            }
            
            jQuery("#block_price").html(json.price);
            if (json.basicprice){
                jQuery("#block_basic_price").html(json.basicprice);
            }
            
            for(key in json){
                if (key.substr(0,3)=="pq_"){
                    jQuery("#pricelist_from_"+key.substr(3)).html(json[key]);
                }
            }

            if (json.available=="0"){
                jQuery(".productfull #not_available").html("<div class='not_available orangeobl'><b>СЕЙЧАС ЭТОГО ТОВАРА НЕТ В НАЛИЧИИ</b><p>Не расстраивайтесь! Вы можете оформить предзаказ товара. Как только товар появится в наличии, мы Вас оповестим.</p><div class='arrow1'></div><div class='close1'></div></div>");
// МОЯ ВСТАВКА (Удаляет по клику содержимое блока)
jQuery('#not_available .close1').click(function(){
jQuery('#not_available').html('');
});          
// конец МОЯ ВСТАВКА (Удаляет по клику содержимое блока)
}else{
                jQuery("#not_available").html("");
            }
            

if (json.displaybuttons=="0"){
                jQuery(".productfull .prod_buttons").hide();
// МОЯ ВСТАВКА (предзаказ)
jQuery(".pred_zakaz").removeClass("noovisible");
//конец МОЯ ВСТАВКА (предзаказ)
            }else{
                jQuery(".productfull .prod_buttons").show();
// МОЯ ВСТАВКА (предзаказ)
jQuery(".pred_zakaz").addClass("noovisible");
//конец МОЯ ВСТАВКА (предзаказ)
            }


            if (json.ean){
                jQuery("#product_code").html(json.ean);
            }

            if (json.weight){
                jQuery("#block_weight").html(json.weight);
            }
            if (json.pricedefault){
                jQuery("#pricedefault").html(json.pricedefault);
            }
            if (json.qty){
                jQuery("#product_qty").html(json.qty);
            }
            if (json.oldprice){
                jQuery("#old_price").html(json.oldprice);
            }

            if (json.images && json.images.length>0){
                var count_prod_img = json.images.length;
                var html_thumb_img = "";
                var html_middle_img = "";
                var html_zoom_img = '';
                if (typeof(jshop_product_hide_zoom_image)==='undefined') jshop_product_hide_zoom_image = 0;
                if (!jshop_product_hide_zoom_image){
                    html_zoom_img = ' <div class="text_zoom"><img alt="zoom" src="'+liveimgpath+'/search.png" /> '+translate_zoom_image+'</div>';
                }
                for(var j=0;j<count_prod_img;j++){
                    html_thumb_img+='<img class="jshop_img_thumb" src="'+liveproductimgpath+'/thumb_'+json.images[j]+'" onclick = "showImage('+j+')" /> ';
                    tmp = 'style="display:none"';
                    if (j==0) tmp = '';
                    html_middle_img+='<a class="lightbox" id="main_image_full_'+j+'" href="'+liveproductimgpath+'/full_'+json.images[j]+'" '+tmp+'><img id="main_image_'+j+'" src="'+liveproductimgpath+'/'+json.images[j]+'" />'+html_zoom_img+'</a>';
                }
                if (json.displayimgthumb=="1")
                    jQuery("#list_product_image_thumb").html(html_thumb_img);
                else
                    jQuery("#list_product_image_thumb").html("");
                jQuery("#list_product_image_middle").html(html_middle_img);
                initJSlightBox();
            }
            
            if (json.block_image_thumb || json.block_image_middle){
                jQuery("#list_product_image_thumb").html(json.block_image_thumb);            
                jQuery("#list_product_image_middle").html(json.block_image_middle);
                initJSlightBox();
            }

if (typeof(json.demofiles)!='undefined'){
jQuery("#list_product_demofiles").html(json.demofiles);
}

            jQuery.each(reloadAttribEvents, function(key, handler){
                handler.call(this, json);
            });

            reloadAttrValue();
//МОЙ
addattrClass();
//////////////
        }
    );
}

function setAttrValue(id, value){
    attr_value[id] = value;
    reloadAttribSelectAndPrice(id);
    reloadAttribImg(id, value);
}

function reloadAttribImg(id, value){
    var path = "";
    var img = "";
    if (value=="0"){
        img = "";
    }else{
        if (attr_img[value]){
            img = attr_img[value];
        }else{
            img = "";
        }
    }
    
    if (img==""){
        path = liveimgpath;
        img = "blank.gif";
    }else{
        path = liveattrpath;
    }
    jQuery("#prod_attr_img_"+id).attr('src', path+"/"+img);
}

function reloadAttrValue(){    
    for(var id in attr_value){
        if (jQuery("input[name=jshop_attr_id\\["+id+"\\]]").attr("type")=="radio"){
            attr_value[id] = jQuery("input[name=jshop_attr_id\\["+id+"\\]]:checked").val();
        }else{
            attr_value[id] = jQuery("#jshop_attr_id"+id).val();
        }
    }
}


// МОЙ добавляем класс для атрибута
function addattrClass(){
for(var id in attr_value){
if (jQuery("input[name=jshop_attr_id\\["+id+"\\]]").prop('checked'))   {
 attr_value[id] = jQuery("input[name=jshop_attr_id\\["+id+"\\]]").addClass("checkkkkk");
}else{
attr_value[id] = jQuery("input[name=jshop_attr_id\\["+id+"\\]]").removeClass("checkkkkk");
}
}}
//////////////////////////
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
Re: Атрибуты в functions.js
« Ответ #2 : 02.01.2015, 23:41:38 »
что итого сделать то надо?
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

avantyrist

  • Захожу иногда
  • 228
  • 3 / 0
Re: Атрибуты в functions.js
« Ответ #3 : 03.01.2015, 00:06:19 »
я не могу понять как выцепить-определить ID опции атрибута

<input type="radio" name="jshop_attr_id[3]"   id="jshop_attr_id37"   value="7" onclick="setAttrValue('3', this.value);" class="checkkkkk">

name="jshop_attr_id[3]"  --  3 ето ID атрибута
id="jshop_attr_id37"  --  37  ето ID ОПЦИИ атрибута 3

for(var id in attr_value){.....}    таким образом переберается ID атрибута
и то что я смог наковырять немного неправильно, так как при проверки Инпута, определяется ID атрибута а не его ОПЦИИ
Спойлер
[свернуть]

Вобщем мне надо определить ID ОПЦИИ атрибута.
Ето необходимо для того чтобы по ID ОПЦИИ атрибута можно было выцеплять у какой ОПЦИИ атрибута установлен Чекбокс и добавлять ему КСС клас, когда он не установлен удалять етот клас. В коде который я показывал выше идёт определение ID атрибута, а у всех инпутов оно одинаковое, в етом вся беда :(
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
Re: Атрибуты в functions.js
« Ответ #4 : 03.01.2015, 11:55:12 »
хорошо :) я еще раз спрошу

что итого сделать то надо?
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

avantyrist

  • Захожу иногда
  • 228
  • 3 / 0
Re: Атрибуты в functions.js
« Ответ #5 : 03.01.2015, 12:32:15 »
Надо понять как определять  ID ОПЦИИ атрибута, для того чтобы скрипт понимал на какой инпут кликнули и какому у инпуту добавлять Класс :(
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
Re: Атрибуты в functions.js
« Ответ #6 : 03.01.2015, 13:01:03 »
да уж... видимо новый год сказывается... :)
avantyrist, чего в конечном итоге вы хотите добиться? вам надо присвоить класс тому инпуту, на который кликнули? все?
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

avantyrist

  • Захожу иногда
  • 228
  • 3 / 0
Re: Атрибуты в functions.js
« Ответ #7 : 03.01.2015, 13:11:46 »
Такая структура атрибутов:

<div class="customjshop_attr_id37">
<input class="custom" type="radio" name="jshop_attr_id[3]" id="jshop_attr_id37" value="7" onclick="setAttrValue('3', this.value);">
<label class="radio_attr_label"  for="jshop_attr_id37">Zero  0мг/мл</label>
</div>

<div class="customjshop_attr_id38">
<input class="custom" type="radio" name="jshop_attr_id[3]" id="jshop_attr_id38" value="8" onclick="setAttrValue('3', this.value);">
<label class="radio_attr_label"  for="jshop_attr_id37">Zero  0мг/мл</label>
</div>

Надо при клике на ОПЦИЮ атрибута  <input  id="jshop_attr_id37" ......>   Добавить для блока <div class="customjshop_attr_id37">  дополнительный клас.
Если выбрать другую опцию то удалить с предыдущего div блока, и добавить к текущему

да уж... видимо новый год сказывается... Azn   ----  мне понравилось :)
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
Re: Атрибуты в functions.js
« Ответ #8 : 03.01.2015, 13:57:10 »
Цитировать
onclick="jQuery('[class ^= customjshop_attr_id]').removeClass('checkkkkk');jQuery('#custom'+this.id).addClass('checkkkkk');setAttrValue('3', this.value);"
и не надо никаких хаков. что вы их все так любите...
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

avantyrist

  • Захожу иногда
  • 228
  • 3 / 0
Re: Атрибуты в functions.js
« Ответ #9 : 03.01.2015, 14:32:47 »
Ух ёмаё ну сейчас я ешё больше запутался.
Тот код который вы написали, его надо добавить в onclick=""  самого инпута ? если ето так то надо лезть в файл functions.php
 атрибуты там формируются вот так:
Код
<input  type="radio" name="'.$name.'" id="'.$id_text.'" value="'.$obj->$key.'"'.$sel.' '.$params.'>
'.$params.'  вот ета штука и выводит на сайте вот такую штуку      onclick="setAttrValue('3', this.value)
Откуда ета переменная тянет данные я не нашёл, но етоже и будет ешё тот Хак,

Если ето jQuery скрипт:   jQuery('#custom'+this.id) ---- к чему ето обращение идёт ?

блин  :(
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Re: Атрибуты в functions.js
« Ответ #10 : 03.01.2015, 14:48:07 »
Код: php-brief
jQuery(document).ready(function($){
   $('[class ^= customjshop_attr_id]').click(function(){
      $('[class ^= customjshop_attr_id]').removeClass('checkkkkk');
      $(this).addClass('checkkkkk');
   })
})
http://jsfiddle.net/n_robert/020w1b07/
Такая структура атрибутов:
---
Надо при клике...Добавить для блока...дополнительный клас.
Если выбрать другую опцию то удалить с предыдущего div блока, и добавить к текущему
Если бы все так сразу задавали свой вопрос, сэкономили бы кучу времени и нервов, и не только своих.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
Re: Атрибуты в functions.js
« Ответ #11 : 03.01.2015, 15:00:57 »
Если бы все так сразу задавали свой вопрос, сэкономили бы кучу времени и нервов, и не только своих.

небо синее, море мокрое, на форуме так не задают вопросы :)
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

avantyrist

  • Захожу иногда
  • 228
  • 3 / 0
Re: Атрибуты в functions.js
« Ответ #12 : 03.01.2015, 15:20:14 »
Да ладно я пытался максимально описать что делал и то чего хотел добиться, Просто я изначально тупо подошёл к етому вопросу, я пытался  проверить инпут на то что он Чекнутый или нет :)) В итоге полез в ядро компонента и ковырялся там (пол дня убил), чтобы понять как же блин определить ето дурацкое ID.
 В общем сам чекнутый  crazy!....

dmitry_stas и robert Агромное вам спасибо с Новым годом и наступающим рождеством.

П.С. А всётаки в  файле function.js есть место где определяются ID ОПЦИЙ атрибута, или как их можно определить :)?     заело однако....
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
Re: Атрибуты в functions.js
« Ответ #13 : 03.01.2015, 16:08:51 »
в setAttrValue передается 2 параметра - ID атрибута (не опции, а самого атрибута), и значение (value) опции. инпут имеет name="jshop_attr_id[ID атрибута]". таким образом можно найти все инпуты с name="jshop_attr_id[переданный ID атрибута]", а потом внутри них уже найти искомый инпут с value="переданное значение опции".
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

avantyrist

  • Захожу иногда
  • 228
  • 3 / 0
Re: Атрибуты в functions.js
« Ответ #14 : 03.01.2015, 22:37:57 »
Рано я обрадовался, оно не совсем коректно работает  >:(
При использовании одного атрибута работает нормально, а если используются несколько зависимых атрибутов, то усё... хепи енд
Всётаки придётся ковырять functions.js
и както привязываться там к   for(var id in attr_value){
чтобы скрипт понимал каждый блок атрибутов по отдельности :((
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Не будь паразитом, сделай что-нибудь самостоятельно!
*

avantyrist

  • Захожу иногда
  • 228
  • 3 / 0
Re: Атрибуты в functions.js
« Ответ #16 : 04.01.2015, 13:43:53 »
robert спс что откликнулись. В предыдущем посте я неполностью написал суть проблемы:
Структура инпутов с зависимыми атрибутами такая:
Спойлер
[свернуть]

Как ето всё работает:
block_attr_sel_(любое переменное число, при формировании соответствуюет ID атрибута), таких блоков на странице может быть несколько
Первый блок в списке, <div id="block_attr_sel_3"> он какбы постоянный: если из етого блока выбрать любой инпут, то второй блок перезагружается Аджаксом.

Теперь по пунктам:
1) Допустим выбрали в первом блоке инпут, а во втором блоке другой инпут (Оба инпута имеют состояние Чекед).
2) А теперь в первом блоке выберем другой инпут. Содержимое второго блока перезагрузилось но тот инпут который был выбран до етого, по прежнему состояние ЧЕКЕД.

Последний скрипт от robert работает но есть проблемы:
1) из-за перезагрузок второго блока идёт сбой, тоесть он перестаёт работать для перезагруженного блока
2) После перезагрузки блока инпут попрежнему имеет состояние чекед (но из-за того что он перезагрузился добавленный класс "checkkkkk" удаляется ),  и вот тута надо сделать проверку чекнут инпут или нет, если чекнут то добавить  класс, если не чекнут то ничего не делать, и если выбирать другой инпут то присвоенный класс удалить.

Первую проблему удалось решить: Последний скрипт добавил в product_default.php, потом пошёл в файл functions.js и создал там функцию:
Спойлер
[свернуть]
Обьявил её в function reloadAttribSelectAndPrice(id_select){
после етой строки:   reloadAttrValue();
                             addClassAttr();   
Таким образом скрипт работает на странице, когда она загрузилась, и повторно запускается после того как блок с атрибутом перезагрузился. Наверное ето и криво, но по другому мозгов не хватает.. :)

Первую проблему я не могу никак решить, каким образом к скрипту дополнительно прикрутить проверку инпута, на то тчо он чекнут или нет,  .prop("checked")      >:(
« Последнее редактирование: 04.01.2015, 16:19:37 от avantyrist »
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Re: Атрибуты в functions.js
« Ответ #17 : 04.01.2015, 14:09:13 »
http://jsfiddle.net/n_robert/020w1b07/6/

P.S. Может не сработать из-за AJAX-обновления. В этом случае проверку сделайте в AJAX-callback или привяжите к событию ajaxComplete.
« Последнее редактирование: 04.01.2015, 15:11:21 от robert »
Не будь паразитом, сделай что-нибудь самостоятельно!
*

avantyrist

  • Захожу иногда
  • 228
  • 3 / 0
Re: Атрибуты в functions.js
« Ответ #18 : 04.01.2015, 15:51:58 »
AJAX обновления я решил проблему, добавлением етого скрипта в функцию, и потом вызываю ету функцию во время обновления. functions.js

Вроде тьфу тьфу...  работает. robert агромная благодарность Вам. 

П.С. вечером обновлю етот пост по пунктам напишу что куда прописываю,  уверен ето многим пригодится
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Re: Атрибуты в functions.js
« Ответ #19 : 05.01.2015, 12:44:02 »
avantyrist, пишите здесь, чтобы другие могли использовать ваше решение (или вам помочь). jQuery работает со селекторами, поэтому если вам нужно обработать конкретные селекторы, необходимо их каким-то образом указывать.
http://jsfiddle.net/n_robert/020w1b07/10/
Не будь паразитом, сделай что-нибудь самостоятельно!
*

newalex

  • Захожу иногда
  • 94
  • 5 / 0
Re: Атрибуты в functions.js
« Ответ #20 : 18.10.2024, 16:06:39 »
Хорошая штука, получилось как нужно. Но возник дополнительный вопрос )))
Где, и что переделать надо, что бы кроме наименования опции зависимы атрибутов, у каждого атрибута появился вывод артикула или кода опции.
А не так как сейчас, у активной высвечивается код, артикул. Где, что добавить надо, не смог понять в functions.php или где еще есть данные связанные именно с кодом или артикулом опции зависимого атрибута (
*

kit2m2

  • Живу я здесь
  • 3374
  • 276 / 0
  • Беру сайты на полное сопровождение
Re: Атрибуты в functions.js
« Ответ #21 : 18.10.2024, 16:43:12 »
или где еще есть данные связанные именно с кодом или артикулом опции зависимого атрибута (
Эти данные есть в таблице - #__jshopping_products_attr. Их нужно получать запросом к базе данных
Расширения для JoomShopping | Ссылка на Телеграм-канал | Сайты и магазины под ключ: Дизайн, Верстка, Программирование (расширения на заказ), СЕО-оптимизация, Сопровождение, Перенос на Joomla 4+ (5+) и JoomShopping 5+
*

newalex

  • Захожу иногда
  • 94
  • 5 / 0
Re: Атрибуты в functions.js
« Ответ #22 : 18.10.2024, 17:14:21 »
Не думаю. Т.к. вывод в функции есть на картинку свободного атрибута, названия атрибута, значения. А вот артикуда кода чет не понимаю как получить. Отдельный запрос делать из базы думаю, что некорректно.
Код
function sprintRadioList($list, $name, $params, $key, $val, $actived = null, $separator = ' '){
    $html = "";
    $id = str_replace("[","",$name);
    $id = str_replace("]","",$id);
    foreach($list as $obj){
        $id_text = $id.$obj->$key;
        if ($obj->$key == $actived) $sel = ' checked="checked"'; else $sel = '';
        $html.='<span class="input_type_radio "><input class="custom" type="radio" name="'.$name.'" id="'.$id_text.'" value="'.$obj->$key.'"'.$sel.' '.$params.'> <label for="'.$id_text.'">'.$obj->$val."</label></span>".$separator;
    }
return $html;
}
Вот здесь видимо и надо получить код или артикул?
*

kit2m2

  • Живу я здесь
  • 3374
  • 276 / 0
  • Беру сайты на полное сопровождение
Re: Атрибуты в functions.js
« Ответ #23 : 18.10.2024, 20:29:27 »
Не думаю. Т.к. вывод в функции есть на картинку свободного атрибута, названия атрибута, значения. А вот артикула кода чет не понимаю как получить. Отдельный запрос делать из базы думаю, что некорректно.
Вы не думаете, а я знаю...
Проверьте, распечатайте $list и посмотрите, есть ли там значение кода или артикула? Если нет, то нужно отдельно получать эти значения из базы и добавлять в $list и потом выводить их рядом с радиокнопкой.

И вообще что это за код?
Код
$id = str_replace("[","",$name);
$id = str_replace("]","",$id);
Зачем все это? Или это код от Нейронки?
Здесь два раза одной переменной $id назначается значение. На выходе у переменной $id будет только значение последней строчки.
Код
$sel = '';
Переменную $sel нужно обновлять до цикла!
Код в цикле такой:
Код
if ($obj->$key == $actived) $sel = ' checked="checked"';
Это не нужно:
Код
else $sel = '';
Здесь точки не нужно:
Код
$html.='<span class="input_type_radio ">
Вы добавляете значение к пустой переменной ранее объявленной как пустая, значит нужно просто присвоить значение достаточно знака "=" (точки не нужно)
И вообще сомнительно что этот код работает...
« Последнее редактирование: 18.10.2024, 22:13:27 от kit2m2 »
Расширения для JoomShopping | Ссылка на Телеграм-канал | Сайты и магазины под ключ: Дизайн, Верстка, Программирование (расширения на заказ), СЕО-оптимизация, Сопровождение, Перенос на Joomla 4+ (5+) и JoomShopping 5+
*

newalex

  • Захожу иногда
  • 94
  • 5 / 0
Re: Атрибуты в functions.js
« Ответ #24 : 19.10.2024, 08:40:49 »
Это работающий код из файла. Т.е. работающая функция.
*

kit2m2

  • Живу я здесь
  • 3374
  • 276 / 0
  • Беру сайты на полное сопровождение
Re: Атрибуты в functions.js
« Ответ #25 : 19.10.2024, 09:42:58 »
Это работающий код из файла. Т.е. работающая функция.
Даже если это так (я глянул Helper.php), то это не значит что там не может быть ошибок...
И это не отменяет изначальной задачи - Вывести код или артикул

Текущие их значения при смене опции атрибута на странице товара загружаются Аякс-запросом из базы данных. Всех значений кода и артикула нет на странице товара. Их нужно получать из базы данных и потом уже выводить где Вы хотите (наверное рядом с названиями опций атрибута).
Расширения для JoomShopping | Ссылка на Телеграм-канал | Сайты и магазины под ключ: Дизайн, Верстка, Программирование (расширения на заказ), СЕО-оптимизация, Сопровождение, Перенос на Joomla 4+ (5+) и JoomShopping 5+
*

newalex

  • Захожу иногда
  • 94
  • 5 / 0
Re: Атрибуты в functions.js
« Ответ #26 : 19.10.2024, 11:05:52 »
Вот код файла, который в карточке товара выводит картинку опции зависимого атрибута и название опции. Но не выводит артикул или код подукта:

Код
<?php
defined('_JEXEC') or die('Restricted access');

class plgJshoppingProductsProduct_attr_1images extends JPlugin {

public function __construct(&$subject, $config){
parent::__construct($subject, $config);

    }
   
    public function onBeforeBuildSelectAttribute(&$attributeValues, &$attributeActive, &$selects, &$attrib, &$obj){
$db = JFactory::getDbo();
$query = "SELECT * FROM `#__jshopping_products_attr` WHERE product_id=".(int)$obj->product_id." AND ext_attribute_product_id>0";
        $db->setQuery($query);
$list = $db->loadObjectList();
$attrsid = array_keys($attributeValues);
$data = [];
foreach($list as $k => $v) {
foreach($attrsid as $aid) {
if ($v->{'attr_'.$aid} != 0 && !isset($data[$aid][$v->{'attr_'.$aid}])) {
$img = $this->getImage($v->ext_attribute_product_id);
if ($img) {
$data[$aid][$v->{'attr_'.$aid}] = $img;
}
}
}
}

foreach($attributeValues as $aid => $listval) {
foreach($listval as $k => $v) {
if (isset($data[$aid][$v->val_id])) {
$attributeValues[$aid][$k]->prod_img = $data[$aid][$v->val_id];
}
}
}
    }

private function getImage($pid) {
$db = JFactory::getDbo();
$query = "SELECT image FROM `#__jshopping_products` WHERE product_id=".(int)$pid;
        $db->setQuery($query);
return $db->loadResult();
}


private function getEAN($pid) {
$db = JFactory::getDbo();
$query = "SELECT ean FROM `#__jshopping_products` WHERE product_id=".(int)$pid;
        $db->setQuery($query);
return $db->loadResult();
}


public function onBuildSelectAttribute(&$attributeValues, &$attributeActive, &$selects, &$options, &$attr_id, &$v) {
$jshopConfig = JSFactory::getConfig();
$options = $attributeValues[$attr_id];

if ($v->attr_type == 2) {
foreach($options as $k2=>$v2) {
if ($v2->prod_img) {
$options[$k2]->value_name = "<img src='".$jshopConfig->image_product_live_path."/thumb_".$v2->prod_img."' alt='' /> <span>".trim(strip_tags($v2->value_name))."</span>    " ;




} elseif ($v2->image) {
$options[$k2]->value_name = "<img src='".$jshopConfig->image_attributes_live_path."/".$v2->image."' alt='' /> <span>".trim(strip_tags($v2->value_name))."</span>";
}
}

if ($jshopConfig->attr_display_addprice) {
foreach($options as $k2=>$v2) {
if (($v2->price_mod=="+" || $v2->price_mod=="-" || $jshopConfig->attr_display_addprice_all_sign) && $v2->addprice>0){
$ext_price_info = " (".$v2->price_mod.formatprice($v2->addprice).")";
$options[$k2]->value_name .=$ext_price_info;
}
}
}

$radioseparator = '';
if ($jshopConfig->radio_attr_value_vertical) $radioseparator = "<br/>";
foreach($options as $k2=>$v2){
$options[$k2]->value_name = "<span class='radio_attr_label'>".$v2->value_name."</span>";
}

$selects[$attr_id]->selects = sprintRadioList($options, 'jshop_attr_id['.$attr_id.']', 'onclick="setAttrValue(\''.$attr_id.'\', this.value);"', 'val_id', 'value_name', isset($attributeActive[$attr_id])? $attributeActive[$attr_id] : 0, $radioseparator);
$selects[$attr_id]->selects = str_replace(array("\n","\r","\t"), "", $selects[$attr_id]->selects);
}

}
   
}

Этот кусок файла осуществляет вывод картинки и название, имя опции:
Код

if ($v->attr_type == 2) {
foreach($options as $k2=>$v2) {
if ($v2->prod_img) {
$options[$k2]->value_name = "<img src='".$jshopConfig->image_product_live_path."/thumb_".$v2->prod_img."' alt='' /> <span>".trim(strip_tags($v2->value_name))."</span>";

} elseif ($v2->image) {
$options[$k2]->value_name = "<img src='".$jshopConfig->image_attributes_live_path."/".$v2->image."' alt='' /> <span>".trim(strip_tags($v2->value_name))."</span>";
}
}


Где строка
Код
".trim(strip_tags($v2->value_name))."</span>"
выводит имя опции. Т.е. по образу видимо надо добавить вывод ean ?
*

kit2m2

  • Живу я здесь
  • 3374
  • 276 / 0
  • Беру сайты на полное сопровождение
Re: Атрибуты в functions.js
« Ответ #27 : 19.10.2024, 11:51:14 »
Тот код, который Вы первым привели, вообще какого стороннего плагина о котором я ничего не знаю...
Я Вам написал, что Вам нужно получить нужные значения и вывести их куда Вы хотите, а где Вы это будете делать (как организовывать вывод) это ваше право.
Расширения для JoomShopping | Ссылка на Телеграм-канал | Сайты и магазины под ключ: Дизайн, Верстка, Программирование (расширения на заказ), СЕО-оптимизация, Сопровождение, Перенос на Joomla 4+ (5+) и JoomShopping 5+
*

newalex

  • Захожу иногда
  • 94
  • 5 / 0
Re: Атрибуты в functions.js
« Ответ #28 : 19.10.2024, 14:23:14 »
Первый код, это файл functions.php. А код сегодняшний, который используется для вывода картинок опций атрибутов и название опции атрибута. Я вот говорю, что возможно именно в сегодняшнем коде есть возможность получить код продукта или артикул.
Картинки выводятся и рядом название опции. Вот здесь и стоит вывести и код или артикул.
*

newalex

  • Захожу иногда
  • 94
  • 5 / 0
Re: Атрибуты в functions.js
« Ответ #29 : 19.10.2024, 14:41:22 »
https://disk.yandex.com/i/EJqIRIqaUeVQyA Это работающий пример и нехватка кода или артикула опции )
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

WT JoomShopping Finder плагин умного поиска (товары, атрибуты, характеристики)

Автор sergeytolkachyov

Ответов: 0
Просмотров: 2898
Последний ответ 09.06.2026, 17:17:38
от sergeytolkachyov
Атрибуты полей при оформлении заказа в JoomShopping

Автор goga_pgasovav

Ответов: 1
Просмотров: 4671
Последний ответ 12.08.2025, 11:21:29
от kit2m2
Атрибуты - "Внимание выберите параметры"?

Автор konsty

Ответов: 16
Просмотров: 5343
Последний ответ 12.05.2023, 13:57:21
от art22
Не сохраняются добавленные атрибуты

Автор Alex_iPod

Ответов: 3
Просмотров: 1239
Последний ответ 17.04.2023, 22:41:07
от victorantoniak
Характеристики, атрибуты, свободные атрибуты.

Автор Geetler

Ответов: 20
Просмотров: 8267
Последний ответ 24.11.2022, 20:47:04
от Mister Shadow