Новости Joomla

Загадочный параметр $live_site в configuration.php Joomla

Загадочный параметр $live_site в configuration.php Joomla

👩‍💻 Загадочный параметр $live_site в configuration.php Joomla. Зачем он нужен?Давным-давно, когда Joomla ещё была маленькой, в неё внедрили параметр $live_site. В ней хранился домен текущего сайта на случай, если Joomla не могла его определить из-за неверной настройки сервера. Нужно это было для разных SEO-компонентов, для использования редиректов и т.д.Со временем для работы собственно сайта этот параметр перестал быть нужным. Уже в начале 2010-х стали встречаться рекомендации оставлять этот параметр пустым, дабы оный не привёл к лишним проблемам и путанице. Тем более, в web-админке нет места, где его можно указать или посмотреть его значение. Только в configuration.php, а туда смотрят не часто.Однако, параметр всё же остался в ядре Joomla. Зачем он нужен? А нужен он в 2-х случаях:- для работы класса Joomla\CMS\Uri\Uri, который часто используется в коде Joomla для работы методов

Uri::root() и
Uri::base(), а значит может влиять и на работу в том числе ajax-скриптов.- для работы Joomla в CLI - командной строке сервера. В случае если вы используете в вашем CLI-плагине методы опять-таки класса Uri, то CLI ничего не знает о текущем домене, так как запускается вне web-сервера. Поэтому домен нужно указывать принудительно. Либо с помощью параметра командной строки
--live-site, например,
—live-site=https://site.ru/. Со слешем на конце, иначе в CLI адрес сайта станет
https://site.rujoomla.php.Либо в параметре
$live_site в файле configuration.php, так как
CliApplication берёт настройку оттуда, если параметр команды не указан или пуст.⚠️ Иначе в качестве хоста и url класса Uri будет установлено
https://joomla.invalid/set/by/console/application. В самом же коде команды получить параметр
$live_site можно из объекта приложения

protected function doExecute(InputInterface $input, OutputInterface $output): int    {         //...              $live_site = $this->getApplication()->get('live_site');         //...    }
и исходя из этого строить дальнейшую логику.@joomlafeed#joomla #разработка #php #cli

Вышел плагин AllVideos v.7.0 от JoomlaWorks

Вышел плагин AllVideos v.7.0 от JoomlaWorks

Вышел плагин AllVideos v.7.0 от JoomlaWorks.Этот контент-плагин - одно из старейших расширений для Joomla. Его задача - преобразовывать шорт-коды вида

{YOUTUBE}...{/YOUTUBE},
{MP3}parth/to/file.mp3{/MP3} и подобные во встроенные видео или аудио.👩‍💻 v.7.0.0. Что нового?- Добавлена поддержка Youtube Shorts. Просто скопируйте полный url видео и вставьте его внутри тегов
{YOUTUBE}...{/YOUTUBE}.- Поддержка Joomla 5.x без плагина обратной совместимости. PHP 5, PHP 7, PHP 8. - Индексация умным поиском в CLI. В Joomla 5 плагин перестал вызывать ошибку при индексации контента умным поиском через CLI,Заметьте, что этот один и тот же пакет для всех версий Joomla, начиная с 1.5.x и заканчивая 5.x. Технически "под капотом" код плагина по сути не менялся, а для поддержки следующих версий Joomla авторы вставляют "заплатки". Плагин всё ещё использует старую архитектуру файлов и классов Joomla, что, к сожалению, заставляет прибавлять к его описанию слова "пока ещё" - "пока ещё работает".
Страница расширенияGitHub расширенияJoomla Extensions Directory👩‍💻 За ссылку спасибо самому внимательному участнику нашего сообщества - Ринату Кажетову (@rkazhet).@joomlafeed#joomla #расширения

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

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

  • Живу я здесь
  • 3345
  • 273 / 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

  • Живу я здесь
  • 3345
  • 273 / 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

  • Живу я здесь
  • 3345
  • 273 / 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

  • Живу я здесь
  • 3345
  • 273 / 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 Это работающий пример и нехватка кода или артикула опции )
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Атрибуты - "Внимание выберите параметры"?

Автор konsty

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

Автор Alex_iPod

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

Автор Geetler

Ответов: 20
Просмотров: 7454
Последний ответ 24.11.2022, 20:47:04
от Mister Shadow
Скрыть недоступные атрибуты

Автор quixtar

Ответов: 10
Просмотров: 2876
Последний ответ 30.05.2022, 17:37:43
от kit2m2
Под атрибуты или как добавить разделы в атрибуты?

Автор itbc

Ответов: 12
Просмотров: 1246
Последний ответ 19.02.2022, 15:15:03
от itbc