Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: смена текста при нажатии на кнопку
Форумы портала PHP.SU » Клиентская разработка » JavaScript & VBScript » смена текста при нажатии на кнопку

Страниц (1): [1]
 

1. katjuha6 - 03 Февраля, 2013 - 00:56:27 - перейти к сообщению
всем доброго времени суток, уважаемые форумчане!
есть такой код
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. //$param['product_type_id'] = $product_type_id;
  3. //$_SESSION['vmCompareBtnParam'] = $param;
  4. ?>
  5. <div  class="check">
  6. <?PHP if( !defined( '_VALID_MOS' ) && !defined( '_JEXEC' ) ) die( 'Direct Access to '.basename(__FILE__).' is not allowed.' );
  7. //$show_checkboxes = @$_SESSION['vmCompareParam']['show_checkboxes'];
  8. //$product_type_id = $param['product_type_id'];
  9. $session =& JFactory::getSession();
  10. $compare = $session->get('compare');
  11. if(isset($compare[$product_type_id])&& is_array($compare[$product_type_id]) && in_array($product_id, $compare[$product_type_id]) )
  12.  {   $checkValue = 'checked="checked"';}
  13. else {  $checkValue = '';}
  14. ?>
  15. <input name="compare_<?PHP echo $product_id ?>" id="compare_cart_<?PHP echo $product_id ?>" alt="Сравнить" title="Сравнить" type="checkbox" <?PHP echo $checkValue ?> onclick="return CompareProduct( this,<?PHP echo $product_type_id ?>);" class="compare_checkbox">
  16. <?PHP echo "сравнить"?>
  17.  </div>


конструкция данного кода такая: чекбокс и рядом с ним текст "сравнить".
как сделать так, чтобы когда кликали по чекбоксу текст рядом с ним изменялся на "перейти к сравнению"?
Буду очень признательна за помощь =)
2. zypikov - 03 Февраля, 2013 - 01:42:45 - перейти к сообщению
Без текста функции CompareProduct сложно сказать. Но в общем случае нужно модернизировать эту функцию, а точнее нужно найти тег (где содержиться текст который вы хотите заменить, по getElementById, например). Получите тег поменяете его свойство value или innerHTML на тот текст который вы хотите видеть. Сделать это весьма несложно))
3. katjuha6 - 03 Февраля, 2013 - 01:48:35 - перейти к сообщению
я понимаю, что несложно. =) но проблема в том что я не ориентируюсь в php и java.
скажите, пожалуйста, можно ли как-то внести изменения в этот код? или надо пересматривать файлы, относящиеся к компоненту?
4. zypikov - 03 Февраля, 2013 - 02:11:22 - перейти к сообщению
Вы знаете как посмотреть код сгенерированной html-странички? Короче мне нужен текст функции CompareProduct. Сможете выложить? Наверное лучше упаковать ваш заменяемый текст в какой-нубидь <span> присвоить ему id, потом по нему его найти и заменить текст.
5. katjuha6 - 03 Февраля, 2013 - 02:29:53 - перейти к сообщению
текст функции CompareProduct (надеюсь, что это он) =)
CODE (javascript):
скопировать код в буфер обмена
  1. function CompareProduct(el, type_id) {
  2.         var Product_ID = el.name;
  3.         Product_ID = Product_ID.replace("compare_","");
  4.         //alert("ДО: productID="+Product_ID+" ProductsInCart.length="+ProductsInCart.length);
  5.         if (el.checked && CompareTypeID != -1 && type_id!=CompareTypeID) {
  6.                 alert("Hельзя сравнивать товары разного типа");
  7.                 return false;
  8.         }
  9.         else if (el.checked && ProductsInCart.length>=MaxProductToCompare) {
  10.                 alert("Нельзя сравнивать более " + MaxProductToCompare + " продуктов одновременно");
  11.                 return false;
  12.         }
  13.         else if (el.checked) {
  14.                 CompareTypeID = type_id;
  15.                 AddCompare(Product_ID);
  16.         }
  17.         else RemoveCompare(Product_ID);
  18.         //alert("ПОСЛЕ: productID="+Product_ID+" ProductsInCart.length="+ProductsInCart.length);
  19.         return true;
  20.  
  21. }

и на всякий случай код самого чекбокса
CODE (javascript):
скопировать код в буфер обмена
  1. function AddCompare(product) {
  2.         ProductsInCart.push(product);
  3.         var frm= $("frmProductCompare");
  4.         frm.product_id.value=product;
  5.         frm.func.value="comparisonAdd";
  6.         //frm.page.value = "shop.comparison_short";
  7.         handleUpdateCompare(frm);
  8. }

HTML код чекбокса и текста
CODE (html):
скопировать код в буфер обмена
  1. <div  class="check">
  2. <input name="compare_65" id="compare_cart_65" alt="Сравнить" title="Сравнить" type="checkbox"  onclick="return CompareProduct( this,3);" class="compare_checkbox">
  3. Сравнить
  4.  </div>

посмотреть на это можно тут http://test[dot]katalliana[dot]org/ru/in[dot][dot][dot]lya-piknika[dot]html
6. zypikov - 03 Февраля, 2013 - 02:49:29 - перейти к сообщению
Да да то что надо)

CODE (javascript):
скопировать код в буфер обмена
  1.  
  2.  
  3. function CompareProduct(el, type_id) {
  4.  
  5.         var Product_ID = el.name;
  6.  
  7.         Product_ID = Product_ID.replace("compare_","");
  8.  
  9.         var chText = el.parentNode;
  10.         for(var i = 0; chText.childNodes.length - 1; i++){
  11.             if (chText.childNodes[i].nodeType == 1 && chText.childNodes[i].tagName == 'SPAN'){
  12.                       var obj = chText.childNodes[i];
  13.                             obj.innerHTML = 'перейти к сравнению';
  14.                             break;
  15.                }
  16.         }
  17.                
  18.         //alert("ДО: productID="+Product_ID+" ProductsInCart.length="+ProductsInCart.length);
  19.  
  20.         if (el.checked && CompareTypeID != -1 && type_id!=CompareTypeID) {
  21.  
  22.                 alert("Hельзя сравнивать товары разного типа");
  23.  
  24.                 return false;
  25.  
  26.         }
  27.  
  28.         else if (el.checked && ProductsInCart.length>=MaxProductToCompare) {
  29.  
  30.                 alert("Нельзя сравнивать более " + MaxProductToCompare + " продуктов одновременно");
  31.  
  32.                 return false;
  33.  
  34.         }
  35.  
  36.         else if (el.checked) {
  37.  
  38.                 CompareTypeID = type_id;
  39.  
  40.                 AddCompare(Product_ID);
  41.  
  42.         }
  43.  
  44.         else RemoveCompare(Product_ID);
  45.  
  46.         //alert("ПОСЛЕ: productID="+Product_ID+" ProductsInCart.length="+ProductsInCart.length);
  47.  
  48.         return true;
  49.  
  50.  
  51.  
  52. }
  53.  


PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.  
  4. //$param['product_type_id'] = $product_type_id;
  5.  
  6. //$_SESSION['vmCompareBtnParam'] = $param;
  7.  
  8. ?>
  9.  
  10. <div  class="check">
  11.  
  12. <?PHP if( !defined( '_VALID_MOS' ) && !defined( '_JEXEC' ) ) die( 'Direct Access to '.basename(__FILE__).' is not allowed.' );
  13.  
  14. //$show_checkboxes = @$_SESSION['vmCompareParam']['show_checkboxes'];
  15.  
  16. //$product_type_id = $param['product_type_id'];
  17.  
  18. $session =& JFactory::getSession();
  19.  
  20. $compare = $session->get('compare');
  21.  
  22. if(isset($compare[$product_type_id])&& is_array($compare[$product_type_id]) && in_array($product_id, $compare[$product_type_id]) )
  23.  
  24.  {   $checkValue = 'checked="checked"';}
  25.  
  26. else {  $checkValue = '';}
  27.  
  28. ?>
  29.  
  30. <input name="compare_<?PHP echo $product_id ?>" id="compare_cart_<?PHP echo $product_id ?>" alt="Сравнить" title="Сравнить" type="checkbox" <?PHP echo $checkValue ?> onclick="return CompareProduct( this,<?PHP echo $product_type_id ?>);" class="compare_checkbox">
  31.  
  32. <?PHP echo "<span>сравнить</span>"?>
  33.  
  34.  </div>
  35.  


Может потребовать правда для span вырванивание задать(. Попробуйте
7. katjuha6 - 03 Февраля, 2013 - 07:39:32 - перейти к сообщению
спасибо! работает!!!!!! =))))
причем работает даже быстрее, чем с родным кодом! это вдвойне приятно!!! и выравнивать ничего не надо! =))))
ой, что-то у меня эмоции прорезались. прошу прощения. =)
еще вопрос: когда переходишь по ссылке или обновляешь страницу - чекбокс "перейти к сравнению" снова изменяется на "сравнить". можно ли как-то "закрепить" это "перейти к сравнению" при переходе по ссылкам?
8. zypikov - 03 Февраля, 2013 - 21:53:57 - перейти к сообщению
katjuha6 пишет:
причем работает даже быстрее, чем с родным кодом! это вдвойне приятно!!! и выравнивать ничего не надо! =))))
. Это настораживает. Проверьте в отладчике ошибок не возникает ли. Я сначала не сообразил, но думаю мой код тоже надо доработать. Дело в том, что ваш чекБокс отметится в случае, если функция вернет true иначе стандартная конструкция return false подавить действия браузера по умолчанию. Чекбокс не отметиться, но все равно текст изменится.

katjuha6 пишет:
еще вопрос: когда переходишь по ссылке или обновляешь страницу - чекбокс "перейти к сравнению" снова изменяется на "сравнить". можно ли как-то "закрепить" это "перейти к сравнению" при переходе по ссылкам?


Естественно он изменится. А точнее будет тот, что генериться пых-скриптом
Можно, конечно, правда думаю это будет сделать по труднее. Так че у нас там сохраняет.. данные при переходе от страничке к страничке..

Это конечно сессии, но врят ли нужно их здесь использовать. Значит либо нужно передавать в post/get запросе еще два параметра один из которых это идентификатор контейнера в котором содержиться ваш span и состояние чекБокса для это контейнера.
Сайт ваш не смотрел, но мне нужно знать как генериться у вас ссылка на следущую страницу.
Либо использовать Куки)
Сейчас не дам код. От недосыпания шифер у крышы едит(
9. katjuha6 - 03 Февраля, 2013 - 22:04:23 - перейти к сообщению
ошибок нету - первое что я проверила после правки кода - это работоспособность модуля. там все прекрасно... =)
а шифер надо иногда все таки крепить к крыше. в общем спать побольше... (сказала я, сама забыв что такое поспать нормально) =)))
дело в том, что все, что Вы мне сейчас написали - для меня этой яй-яй-яй как сложно. вообще темный лес... почти даже дремучий.
тогда можно поставить вопрос по-другому - дело в том, что изначально я хотела сделать на этот чекбокс вслывающее окно. но проблема в том, что у меня до чертовой матери грузится скриптов на странице и там вылезает конфликт библиотек. а устранить этот конфликт я не могу - опять же знаний не хватает... скажите, что проще сделать в данной ситуации?
я ставила alert в код
CODE (javascript):
скопировать код в буфер обмена
  1. function AddCompare(product) {
  2.         ProductsInCart.push(product);
  3.         var frm= $("frmProductCompare");
  4.         frm.product_id.value=product;
  5.         frm.func.value="comparisonAdd";
  6.         //frm.page.value = "shop.comparison_short";
  7.         handleUpdateCompare(frm);
  8. }

но тут нельзя поставить ссылку, а именно из-за ссылки я все это затеяла.
в общем с этой красотой у меня уже сдувает крышку... сама себе пообещала, что закончу этот проект - сажусь за изучение php. раньше он так критично не был нужен. а щас.....
10. zypikov - 05 Февраля, 2013 - 02:10:24 - перейти к сообщению
katjuha6 пишет:
я ставила alert в код

Это очень не красиво.

katjuha6 пишет:
но тут нельзя поставить ссылку, а именно из-за ссылки я все это затеяла.

ссылку на что?)

Насчет библиотек. То мы сейчас делаем достаточно одной jQuery. Лично я бы начал с изучения чистого js постепенно перезжая на фрэймворки. Хотя опять кому как..

Цитата:
а шифер надо иногда все таки крепить к крыше. в общем спать побольше... (сказала я, сама забыв что такое поспать нормально) =)))

Все сложнее. Когда какая я та падла меняет твою жизнь и ты ничего не можешь с этим сделать..

Если бы не моя усталость, написал бы я вам код поддержку через куки сохранение состояние надписи

 

Powered by ExBB FM 1.0 RC1