Новости Joomla

Совет по Joomla: несколько значений по умолчанию в XML-формах для стандартных полей типа list

👩‍💻 Совет по Joomla: несколько значений по умолчанию в XML-формах для стандартных полей типа list.При работе над плагином возникла необходимость указать стандартный набор из нескольких элементов стандартного поля списка. И хотелось указать их в стандартном же атрибуте default для полей. Когда это нужно?Когда Ваши пользователи устанавливают плагин и НЕ заходят в настройки - в коде вы можете использовать значения по умолчанию с помощью класса Registry (писал об этом ранее) и всегда быть уверенным, что хоть какие-то жизненно необходимые параметры к вам придут всегда. 🧐 Но как сделать то же самое для интерфейса админки?Пользователя нужно направлять, предлагать очевидный работоспособный сценарий для начала, а дальше он уже сам разберется. Когда человек заходит в параметры свежеустановленного плагина в Form ещё нет данных и параметры по умолчанию выставляются из атрибутов default в xml-полях.
<field name="showdesc" type="radio"                       label="PLG_CFI_PARAM_SHOWDESC"                       class="btn-group btn-group-yesno"                       default="1">                    <option value="0">JNO</option>                    <option value="1">JYES</option>                </field>
Здесь по умолчанию будет включено "Да". И если пользователь не переключит параметр, то при сохранении мы ожидаемо получим "да" в params плагина.Для поля списков type=&quot;list&quot; можно указать значение по умолчанию и многие знают, что его можно указать только одно.
<field type="list"                       name="article_fields"                       label="article_fields"                       description="article_fields_desc"                       layout="joomla.form.field.list-fancy-select"                       multiple="true"                       default="id"                >                    <option value="id">id</option>                    <option value="title">title</option>                    <option value="alias">alias</option>                    <option value="introtext">introtext</option>                    <option value="fulltext">fulltext</option>                    <option value="state">state</option></field>
Но у нас поле с множественным выбором (атрибут multiple) и хотелось бы указать несколько значений по умолчанию...Оказывается, так можно сделать. Для этого в атрибуте default нужно указать json с нужными параметрами в виде {int}key : {string} value.Например, default='{"0":"id","1":"title"}'.
<field type="list"                       name="article_fields"                       label="article_fields"                       description="article_fields_desc"                       layout="joomla.form.field.list-fancy-select"                       multiple="true"                       default='{"0":"id","1":"title"}'                >                    <option value="id">id</option>                    <option value="title">title</option>                    <option value="alias">alias</option>                    <option value="introtext">introtext</option>                    <option value="fulltext">fulltext</option>                    <option value="state">state</option></field>
⚠️ Обратите внимание на кавычки! Поскольку json_decode не понимает одинарные кавычки собственно json нужно писать с двойными, а значение для атрибута default писать в одинарные.🙏 За подсказанное решение огромное спасибо участникам нашего сообщества - разработчикам Дмитрию Васюкову (@fictionlabs) и Игорю Бердичевскому (@septdir).@joomlafeed#joomla #разработка #webdev #development

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

trzxc

  • Осваиваюсь на форуме
  • 16
  • 0 / 0
Здравствуйте! очень нужна Ваша помощь. Как сделать так, чтобы при нажатии кнопки купить происходил вызов модуля call_back? Или любую другую форму обратной связи в модальном окне. Корзина не нужна, просто сайт каталог с обратной связью. Посоветуйте как лучше сделать. Спасибо!
« Последнее редактирование: 04.05.2013, 23:05:37 от trzxc »
*

nevigen

  • Moderator
  • 10451
  • 863 / 25
  • http://n*****n.com
найти другой компонент.
это магазин
Профессиональные / Бесплатные решения для JoomShopping
Не лечи бесплатно, ибо тот, кто лечится бесплатно, рано или поздно перестает ценить свое здоровье,
а тот, кто лечит бесплатно, рано или поздно перестает ценить результаты своего труда/ (с) Гиппократ?
Не ищите ответов, ищите решение !
*

trzxc

  • Осваиваюсь на форуме
  • 16
  • 0 / 0
найти другой компонент.
это магазин
Спасибо за ответ!
Т.е. с JoomShopping вариантов нет, а если использовать jshopping_cart_ext+. И выводить корзину в модальном окне... но при нажатии оформить заказ все равно приходиться переходить на новую страницу. А возможно оформление заказа продолжить в том же модальном окне? Если нет, то посоветуйте с помощью какого компонента это возможно! Еще раз спасибо!
*

ELLE

  • Глобальный модератор
  • 4505
  • 893 / 0
"задать вопрос" можно переделать под себя. стандартную функцию покупки отключите, а в шаблоне свою кнопку "купить" сделать, по клику на которую будет всплывать форма
*

nevigen

  • Moderator
  • 10451
  • 863 / 25
  • http://n*****n.com
Спасибо за ответ!
Т.е. с JoomShopping вариантов нет, а если использовать jshopping_cart_ext+. И выводить корзину в модальном окне... но при нажатии оформить заказ все равно приходиться переходить на новую страницу. А возможно оформление заказа продолжить в том же модальном окне? Если нет, то посоветуйте с помощью какого компонента это возможно! Еще раз спасибо!
Это магазин !
Купите Мерседес и сделайте из него Калину.
Зачем ЖШ ? сделайте материал и повесьте какую-нить форму обратной связи в модале?

Тут обсуждают ЖШ и как его сделать лучше :)
А как кастрировать ЖШ думаю ума не надо много...
Профессиональные / Бесплатные решения для JoomShopping
Не лечи бесплатно, ибо тот, кто лечится бесплатно, рано или поздно перестает ценить свое здоровье,
а тот, кто лечит бесплатно, рано или поздно перестает ценить результаты своего труда/ (с) Гиппократ?
Не ищите ответов, ищите решение !
*

trzxc

  • Осваиваюсь на форуме
  • 16
  • 0 / 0
"задать вопрос" можно переделать под себя. стандартную функцию покупки отключите, а в шаблоне свою кнопку "купить" сделать, по клику на которую будет всплывать форма
Спасибо!)) работает, вот только не подскажете как эту же кнопку добавить в карточку товара в предпросмотре, т.е. не переходя на страницу самого товара? И тогда вообще идеально! Правильно ли я думаю, что изменения необходимо внести в product.php в components\com_jshopping\templates\default\list_product\... чтобы получилось так, как я задумал? Спасибо за ответ!
*

trzxc

  • Осваиваюсь на форуме
  • 16
  • 0 / 0
Это магазин !
Купите Мерседес и сделайте из него Калину.
Зачем ЖШ ? сделайте материал и повесьте какую-нить форму обратной связи в модале?

Тут обсуждают ЖШ и как его сделать лучше :)
А как кастрировать ЖШ думаю ума не надо много...

Я только начал разбираться в Joomla. Просто, может я чего-то не понимаю, но при добавлении товаров и быстрого редактирования удобнее пользоваться JoomShopping или к примеру zoo, но тем не менее, я не знаю как добавить кнопку именно в карточку товара, в предпросмотре, т.е. не переходя на вкладку подробнее. Мало знаний в php, да их почти нет, но я учусь, пытаюсь. Методом проб и ошибок, да согласен, наверное, не рационально использовать для моих целей ЖШ... но я задался вопросом и попробую решить его.  Спасибо за ответ!
*

trzxc

  • Осваиваюсь на форуме
  • 16
  • 0 / 0
Я попробовал сделать, чтобы кнопка "задать вопрос" из темы, которую вы посоветовали появлялась в категории под каждым товаром под кнопкой "Подробнее". Все делал аналогично как описано в теме, но вносил изменения еще и в product.php из components\com_jshopping\templates\default\list_product\... . Ссылка отображается и форма появляется во всплывающем окне, но появляются несколько полупрозрачных окон формы "задать вопрос"
Вот код:
Код
<?php defined('_JEXEC') or die(); ?>
<?php print $product->_tmp_var_start?>
<table class="product productitem_<?php print $product->product_id?>">
<tr>
    <td class="image">
        <?php if ($product->image){?>
        <div class="image_block">
            <?php if ($product->label_id){?>
                <div class="product_label">
                    <?php if ($product->_label_image){?>
                        <img src="<?php print $product->_label_image?>" alt="<?php print htmlspecialchars($product->_label_name)?>" />
                    <?php }else{?>
                        <span class="label_name"><?php print $product->_label_name;?></span>
                    <?php }?>
                </div>
            <?php }?>
            <a href="<?php print $product->product_link?>">
                <img class="jshop_img" src="<?php print $product->image?>" alt="<?php print htmlspecialchars($product->name);?>" />
            </a>
        </div>
        <?php }?>

        <?php if ($this->allow_review){?>
        <table class="review_mark"><tr><td><?php print showMarkStar($product->average_rating);?></td></tr></table>
        <div class="count_commentar">
            <?php print sprintf(_JSHOP_X_COMENTAR, $product->reviews_count);?>
        </div>
        <?php }?>
        <?php print $product->_tmp_var_bottom_foto;?>
    </td>
    <td>
        <div class="name">
            <a href="<?php print $product->product_link?>"><?php print $product->name?></a>
            <?php if ($this->config->product_list_show_product_code){?><span class="jshop_code_prod">(<?php print _JSHOP_EAN?>: <span><?php print $product->product_ean;?></span>)</span><?php }?>
        </div>
        <div class="description">
            <?php print $product->short_description?>
        </div>
        <?php if ($product->manufacturer->name){?>
            <div class="manufacturer_name"><?php print _JSHOP_MANUFACTURER;?>: <span><?php print $product->manufacturer->name?></span></div>
        <?php }?>
        <?php if ($product->product_quantity <=0 && !$this->config->hide_text_product_not_available){?>
            <div class="not_available"><?php print _JSHOP_PRODUCT_NOT_AVAILABLE;?></div>
        <?php }?>
        <?php if ($product->product_old_price > 0){?>
            <div class="old_price"><?php if ($this->config->product_list_show_price_description) print _JSHOP_OLD_PRICE.": ";?><span><?php print formatprice($product->product_old_price)?></span></div>
        <?php }?>
        <?php if ($product->product_price_default > 0 && $this->config->product_list_show_price_default){?>
            <div class="default_price"><?php print _JSHOP_DEFAULT_PRICE.": ";?><span><?php print formatprice($product->product_price_default)?></span></div>
        <?php }?>
        <?php if ($product->_display_price){?>
            <div class = "jshop_price">
                <?php if ($this->config->product_list_show_price_description) print _JSHOP_PRICE.": ";?>
                <?php if ($product->show_price_from) print _JSHOP_FROM." ";?>
                <span><?php print formatprice($product->product_price);?></span>
            </div>
        <?php }?>
        <?php print $product->_tmp_var_bottom_price;?>
        <?php if ($this->config->show_tax_in_product && $product->tax > 0){?>
            <span class="taxinfo"><?php print productTaxInfo($product->tax);?></span>
        <?php }?>
        <?php if ($this->config->show_plus_shipping_in_product){?>
            <span class="plusshippinginfo"><?php print sprintf(_JSHOP_PLUS_SHIPPING, $this->shippinginfo);?></span>
        <?php }?>
        <?php if ($product->basic_price_info['price_show']){?>
            <div class="base_price"><?php print _JSHOP_BASIC_PRICE?>: <?php if ($product->show_price_from) print _JSHOP_FROM;?> <span><?php print formatprice($product->basic_price_info['basic_price'])?> / <?php print $product->basic_price_info['name'];?></span></div>
        <?php }?>
        <?php if ($this->config->product_list_show_weight && $product->product_weight > 0){?>
            <div class="productweight"><?php print _JSHOP_WEIGHT?>: <span><?php print formatweight($product->product_weight)?></span></div>
        <?php }?>
        <?php if ($product->delivery_time != ''){?>
            <div class="deliverytime"><?php print _JSHOP_DELIVERY_TIME?>: <span><?php print $product->delivery_time?></span></div>
        <?php }?>
        <?php if (is_array($product->extra_field)){?>
            <div class="extra_fields">
            <?php foreach($product->extra_field as $extra_field){?>
                <div><?php print $extra_field['name'];?>: <?php print $extra_field['value']; ?></div>
            <?php }?>
            </div>
        <?php }?>
        <?php if ($product->vendor){?>
            <div class="vendorinfo"><?php print _JSHOP_VENDOR?>: <a href="<?php print $product->vendor->products?>"><?php print $product->vendor->shop_name?></a></div>
        <?php }?>
        <?php if ($this->config->product_list_show_qty_stock){?>
            <div class="qty_in_stock"><?php print _JSHOP_QTY_IN_STOCK?>: <span><?php print sprintQtyInStock($product->qty_in_stock)?></span></div>
        <?php }?>
        <?php print $product->_tmp_var_top_buttons;?>
        <a href="#contactForm">Задать вопрос</a>
        <div class="buttons">
            <?php if ($product->buy_link){?>
            <a class="button_buy" href="<?php print $product->buy_link?>"><?php print _JSHOP_BUY?></a> &nbsp;
            <?php }?>
            <a class="button_detail" href="<?php print $product->product_link?>"><?php print _JSHOP_DETAIL?></a>
            <?php print $product->_tmp_var_buttons;?>
           
        </div>

        <?php print $product->_tmp_var_bottom_buttons;?>
       
    </td>

</tr>
</table>

<?php print $product->_tmp_var_end?>

<script>
var messageDelay = 2000;
jQuery( init );

function init() {
    jQuery('#contactForm').hide().submit( submitForm ).addClass( 'positioned' );
    jQuery('a[href="#contactForm"]').click( function() {
        jQuery('#window').fadeTo( 'slow', .8 );
        jQuery('#contactForm').fadeIn( 'slow', function() {
            jQuery('#senderName').focus();
            } )
        return false;
        } );
    jQuery('#cancel').click( function() {
    jQuery('#contactForm').fadeOut();
    jQuery('#window').fadeOut();
    } );
    jQuery('#contactForm').keydown( function( event ) {
        if ( event.which == 27 ) {
            jQuery('#contactForm').fadeOut();
            jQuery('#window').fadeOut();
        }
    } );
}

function submitForm() {
    var contactForm = jQuery(this);
        if ( !jQuery('#senderName').val() || !jQuery('#senderEmail').val() || !jQuery('#message').val() ) {
            jQuery('#incompleteMessage').fadeIn().delay(messageDelay).fadeOut();
            contactForm.fadeOut().delay(messageDelay).fadeIn();
        } else {
            jQuery('#sendingMessage').fadeIn();
            contactForm.fadeOut();
            jQuery.ajax( {
                url: contactForm.attr( 'action' ) + "?ajax=true",
                type: contactForm.attr( 'method' ),
                data: contactForm.serialize(),
                success: submitFinished
            } );
        }
    return false;
}

function submitFinished( response ) {
    response = jQuery.trim( response );
    jQuery('#sendingMessage').fadeOut();
        if ( response == "success" ) {
            jQuery('#successMessage').fadeIn().delay(messageDelay).fadeOut();
            jQuery('#senderName').val( "" );
            jQuery('#senderEmail').val( "" );
            jQuery('#message').val( "" );
            jQuery('#window').delay(messageDelay+510).fadeOut();
        } else {
            jQuery('#failureMessage').fadeIn().delay(messageDelay).fadeOut();
            jQuery('#contactForm').delay(messageDelay+500).fadeIn();
            jQuery('#window').delay(messageDelay+510).fadeOut();
        }
}
</script>

<form id="contactForm" action="/processForm.php" method="post">
  <h2>Задать вопрос</h2>
  <ul>
    <li>
      <label for="senderName">Имя</label>
      <input type="text" name="senderName" id="senderName" placeholder="Введите ваше имя" required="required" maxlength="40" />
    </li>
    <li>
      <label for="senderEmail">E-mail</label>
      <input type="email" name="senderEmail" id="senderEmail" placeholder="Введите ваш e-mail адрес" required="required" maxlength="50" />
    </li>
    <li>
      <label for="message" style="padding-top: .5em;">Ваш вопрос</label>
      <textarea name="message" id="message" placeholder="Ваш вопрос" required="required" cols="80" rows="10" maxlength="10000"></textarea>
    </li>
  </ul>
   <input name="url" style="display:none" required="required" value="<?php echo "http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];?>"/>
   <input name="urlName" style="display:none" required="required" value="<?php print $this->product->name?>"/>

  <div id="formButtons">
    <input type="submit" id="sendMessage" name="sendMessage" value="Отправить" />
    <input type="button" id="cancel" name="cancel" value="Отмена" />
  </div>
</form>
<div id="sendingMessage" class="statusMessage"><p>Отправка сообщения. Пожалуйста подождите...</p></div>
<div id="successMessage" class="statusMessage"><p>Спасибо за ваш вопрос! Мы свяжемся с Вами в ближайшее время.</p></div>
<div id="failureMessage" class="statusMessage"><p>Возникли неполадки. Попробуйте снова.</p></div>
<div id="incompleteMessage" class="statusMessage"><p>Пожалуйста, заполните все поля формы перед отправкой.</p></div>
<div id="sendingMessage" class="statusMessage"><p>Отправка сообщений. Пожалуйста, подождите ...</p></div>
<div id="successMessage" class="statusMessage"><p>Спасибо за отправку ваших сообщений! Мы свяжемся с Вами в ближайшее время</p></div>
<div id="failureMessage" class="statusMessage"><p>Возникла проблема с отправкой сообщения. Пожалуйста, попробуйте еще раз.</p></div>
<div id="incompleteMessage" class="statusMessage"><p>Пожалуйста, заполните все поля формы перед отправкой.</p></div>
<div id="window"></div>
А вот результат...:
*

trzxc

  • Осваиваюсь на форуме
  • 16
  • 0 / 0
очень надеюсь на Ваш совет, ELLE! Как можно +ть? А то хотел всем спасибо сказать...глупый вопрос, но не вижу где!
*

ELLE

  • Глобальный модератор
  • 4505
  • 893 / 0
в этом шаблоне только ссылку надо было оставить
 <a href="#contactForm">Задать вопрос</a>

а саму форму в общий шаблон категории, где вывод заголовка категории, описания - list_products и\или category_default.php
*

trzxc

  • Осваиваюсь на форуме
  • 16
  • 0 / 0
в этом шаблоне только ссылку надо было оставить
 <a href="#contactForm">Задать вопрос</a>

а саму форму в общий шаблон категории, где вывод заголовка категории, описания - list_products и\или category_default.php
Спасибо!! Все получилось!! Спасибо большое Вам и nevigen!
*

trzxc

  • Осваиваюсь на форуме
  • 16
  • 0 / 0
Здравствуйте! все еще мучаюсь с этой формой из темы "Задать вопрос"...все работает но на e-mail, расположенном на mail.ru, приходит абракадабра. Я уже пересохранял файл processForm в utf-8 через Notepad++ ... не помогает, может что-то посоветуете??
« Последнее редактирование: 15.05.2013, 13:55:21 от trzxc »
*

trzxc

  • Осваиваюсь на форуме
  • 16
  • 0 / 0
в этом шаблоне только ссылку надо было оставить
 <a href="#contactForm">Задать вопрос</a>

а саму форму в общий шаблон категории, где вывод заголовка категории, описания - list_products и\или category_default.php
Здравствуйте! все еще мучаюсь с этой формой из темы "Задать вопрос"...все работает но на e-mail, расположенном на mail.ru, приходит абракадабра. Я уже пересохранял файл processForm в utf-8 через Notepad++ ... не помогает, может что-то посоветуете??
*

ELLE

  • Глобальный модератор
  • 4505
  • 893 / 0
в contactform.php в начало
Код
<?php 
header("Content-Type: application/x-www-form-urlencoded");
header("Accept-Charset: utf-8");
?>
*

trzxc

  • Осваиваюсь на форуме
  • 16
  • 0 / 0
в contactform.php в начало
Код
<?php 
header("Content-Type: application/x-www-form-urlencoded");
header("Accept-Charset: utf-8");
?>
извините, а где он лежит? что это за файл? просто до этого я этот файл вообще не трогал, поиск использовал не нашел. посдкажите пожалуйста. Спасибо большое за ответ!
*

ELLE

  • Глобальный модератор
  • 4505
  • 893 / 0
а, у вас же по-другому
извините, тогда не подскажу
попробуйте спросить в той теме, может у кого-то такая же проблема была
*

trzxc

  • Осваиваюсь на форуме
  • 16
  • 0 / 0
а, у вас же по-другому
извините, тогда не подскажу
попробуйте спросить в той теме, может у кого-то такая же проблема была
а как у Вас?) если не секрет
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Как добавить количество товара возле кнопки купить в списке товаров?

Автор Prosever

Ответов: 3
Просмотров: 2907
Последний ответ 17.04.2023, 23:56:52
от tigra-uki
(решено)Неотображается контент модуля в товарах

Автор gen2023

Ответов: 0
Просмотров: 788
Последний ответ 02.09.2022, 16:27:13
от gen2023
Вывод модуля в описании товара

Автор comb5

Ответов: 5
Просмотров: 864
Последний ответ 28.06.2019, 19:39:15
от dmitry_stas
[Решено] Выводить кнопку Купить даже если нет цены

Автор dron

Ответов: 3
Просмотров: 928
Последний ответ 08.08.2017, 12:35:49
от dron
Перенаправление кнопки "Купить"

Автор stparts

Ответов: 18
Просмотров: 2337
Последний ответ 30.11.2016, 14:08:31
от stparts