Moin Moin Liebe Coder Gemeinde,
Ich steh so ein wenig auf dem Schlauch:
Ich schreibe zur Zeit an einen Wunschzettel, welcher vom Kunden/User ein und ausgeschaltet werden kann.
Dies geschieht durch zwei Radioboxen mit dem Werten 0 (Nein) und 1 (Ja), diese Werte werden dann via Ajax in die DB geschrieben und zum Testen eine pragmaMx Session Variable gesetzt):
Die Radioboxen:
Alles anzeigen
Die php If/else Schleife ist nötig um die Werte aus der DB zu ziehen.
Der PHP Code für die Ajaxfunktion:
Alles anzeigen
Das Javascript:
Alles anzeigen
Wird noch auf .post umgestellt
Soweit so gut, das schreiben in die DB und das setzen der Session funktioniert soweit.
Nun soll, wenn der Wunschzettel für andere User/Kunden sichtbar ist (Wert 1), am Ende des Wunschzettels ein Wunschzettel Versenden Button eingetoggledt werden.
Der Button:
Das Toggle Javascript:
Alles anzeigen
Ok auch das Funktioniert wunderbar.
Nun zu den eigentlichen Problem:
Wie wir ja alle wissen schließt sich der getogglte Inhalt beim Browser reload oder er bleibt offen, je nachdem ob gesetzt ist oder auch nicht.
Nun soll aber der getogglte Inhalt beim der gecheckten Radiobox mit dem Wert 1 offen bleiben und bei Wert 0 zu sein. Das alles natürlich auch nach einen Browser reload oder gar nach schließen des Browsers, löschen der Cookies im Browser oder einfach nur nach den Ausloggen/Einloggen der Seite.
Nun gibt es 4-5 Möglichkeiten, wobei 2 davon nur beim reload des Browsers funktionieren:
Möglichkeit 1 (die Session Variante):
Alles anzeigen
Möglichkeit 2 (die Datenbankvariante):
Alles anzeigen
Nun wenn via onclick bei den Radioboxen sich der Wert von 1 auf 0 ändert, wird diese Änderung nur nach einen reload übernommen.
Nun hab ich mir überlegt, entweder den div Container des Buttons via Ajax neu zu laden oder Javascript/jQuery Cookies einzusetzen.
Nun bei der Ajax Methode ist die Frage, ob auch die Werte korrekt bei einen Browser reload geladen werden, womit dann die Cookies wegfallen würden.
Oder wäre es sinnvoller Cookies einzusetzen, wenn ja welche?
Die reinen Javascript Cookies oder das jQuery Cookie Plugin?
Und kann ich mit den jQuery Cookie Plugin auch gezielt Werte übergeben, so wie es bei der Session möglich ist?
Oder gibt es bei jQuery noch die Möglichkeit, das beim Browser reload die Radioboxen auf ihren Wert und ob sie gecheckt sind geprüft werden?
MfG
Peter
Ich steh so ein wenig auf dem Schlauch:
Ich schreibe zur Zeit an einen Wunschzettel, welcher vom Kunden/User ein und ausgeschaltet werden kann.
Dies geschieht durch zwei Radioboxen mit dem Werten 0 (Nein) und 1 (Ja), diese Werte werden dann via Ajax in die DB geschrieben und zum Testen eine pragmaMx Session Variable gesetzt):
Die Radioboxen:
PHP-Quellcode
- [syntax="html"]
- <div id="accountViewWishList" class="accountViewWishList">
- <?php
- if (isset($customers_wish_list_visible)) {
- $no = ($customers_wish_list_visible == '0') ? true : false;
- } else {
- $no = ($userdata['customers_wish_list_visible'] == '0') ? true : false;
- }
- $yes = !$no;
- ?>
- <p><hr /><?php echo VISIBLE_MY_WISH_LIST_TITLE; ?> <input id="customerWishlistVisibleNo" type="radio" name="customers_wish_list_visible" value="0" <?php echo (empty($no) ? '' : ' checked="checked"'); ?> /> <?php echo NO_TITLE; ?> <input id="customerWishlistVisibleYes" type="radio" name="customers_wish_list_visible" value="1" <?php echo (empty($yes) ? '' : ' checked="checked"'); ?> /> <?php echo YES_TITLE; ?><hr /></p>
- </div>
- [/syntax]
Die php If/else Schleife ist nötig um die Werte aus der DB zu ziehen.
Der PHP Code für die Ajaxfunktion:
PHP-Quellcode
- [syntax="php"]
- <?php
- /**
- * osCommerce, Open Source E-Commerce Solutions
- * http://www.oscommerce.com
- *
- * Copyright (c) 2010 osCommerce
- *
- * Converted to pragmaMX
- *
- * By Peter Stein aka BdMdesigN Copyright (c) 2009 - 2012
- * http://www.osc4pragmamx.org
- *
- * Released under the GNU General Public License V2 ONLY
- */
- defined('mxMainFileLoaded') or die('access denied');
- global $prefix;
- if(isset($_GET['customers_wish_list_visible']) && ($_GET['customers_id'])){
- $customer_id = (int)$_GET['customers_id'];
- $customers_wish_list_visible = (int)$_GET['customers_wish_list_visible'];
- sql_query("UPDATE {$prefix}_users SET customers_wish_list_visible = '" . mxAddSlashesForSQL($customers_wish_list_visible) . "' WHERE customers_id = '" . (int)$customer_id . "' "); // Hier wird der Wert in die DB gescrieben, was auch funktioniert
- mxSessionSetVar('wish_list_visible', $customers_wish_list_visible); // Hier wird die Variable in die PHP Session geschrieben, was auch funktioniert. Wert 0 bei Nein und 1 bei Ja
- } else {
- echo 'Error! Please fill all fileds!';
- }
- ?>
- [/syntax]
Das Javascript:
PHP-Quellcode
- [syntax="javascript"]
- <script type="text/javascript">
- /* <![CDATA[ */
- // code direkt nach seitenaufbau starten
- $(function() {
- $('#accountViewWishList').click(function(){
- $.get('modules.php?name=Customer_Account&file=customer_wish_lists_view_save&customers_id=<?php echo (int)$customer_id; ?>&customers_wish_list_visible=',$("input[name='customers_wish_list_visible']:checked").serialize(),function(data){
- alert(data);
- });
- });
- });
- /* ]]> */
- </script>
- [/syntax]
Wird noch auf .post umgestellt
Soweit so gut, das schreiben in die DB und das setzen der Session funktioniert soweit.
Nun soll, wenn der Wunschzettel für andere User/Kunden sichtbar ist (Wert 1), am Ende des Wunschzettels ein Wunschzettel Versenden Button eingetoggledt werden.
Der Button:
PHP-Quellcode
- [syntax="html"]
- <div id="customerWishlistVisible" class="customerWishlistVisible">
- <span style="float: right;"><a href="modules.php?name=Customer_Account&file=customer_wish_lists_send&customers_id=<?php echo (int)$customer_id; ?>"><button id="customerWishlistVisibleButton" class="customerWishlistVisibleButton"><?php echo IMAGE_BUTTON_SEND_WISH_LIST; ?></button></a></span>
- </div>
- [/syntax]
Das Toggle Javascript:
Quellcode
- [syntax="javascript"]
- <script type="text/javascript">
- /* <![CDATA[ */
- // code direkt nach seitenaufbau starten
- $(function() {
- $('input[name=customers_wish_list_visible]').change(function() {
- // if the "0" button is selected, show the extra text fields
- var selectedValue = $('input[name=customers_wish_list_visible]:checked').val();
- var showTextFields = selectedValue && selectedValue == 1;
- $('.customerWishlistVisible').toggle(showTextFields);
- });
- // hide extra fields initially
- $('.customerWishlistVisible').filter(function() { return $(":radio[name='customers_wish_list_visible']:checked", this).length==1; }).hide();
- });
- /* ]]> */
- </script>
- [/syntax]
Ok auch das Funktioniert wunderbar.
Nun zu den eigentlichen Problem:
Wie wir ja alle wissen schließt sich der getogglte Inhalt beim Browser reload oder er bleibt offen, je nachdem ob gesetzt ist oder auch nicht.
Nun soll aber der getogglte Inhalt beim der gecheckten Radiobox mit dem Wert 1 offen bleiben und bei Wert 0 zu sein. Das alles natürlich auch nach einen Browser reload oder gar nach schließen des Browsers, löschen der Cookies im Browser oder einfach nur nach den Ausloggen/Einloggen der Seite.
Nun gibt es 4-5 Möglichkeiten, wobei 2 davon nur beim reload des Browsers funktionieren:
Möglichkeit 1 (die Session Variante):
PHP-Quellcode
- [syntax="html"]
- <?php
- if (mxSessionGetVar('wish_list_visible') > 0) { // Zeige div Container wenn Session Wert größer ist als 0
- ?>
- <div id="customerWishlistVisible" class="customerWishlistVisible">
- <span style="float: right;"><a href="modules.php?name=Customer_Account&file=customer_wish_lists_send&customers_id=<?php echo (int)$customer_id; ?>"><button id="customerWishlistVisibleButton" class="customerWishlistVisibleButton"><?php echo IMAGE_BUTTON_SEND_WISH_LIST; ?></button></a></span>
- </div>
- <?php
- } else {
- ?>
- <div>
- </div>
- <?php
- }
- ?>
- [/syntax]
Möglichkeit 2 (die Datenbankvariante):
PHP-Quellcode
- [syntax="html"]
- <?php
- if ($userdata['customers_wish_list_visible'] == 1) { // Zeige div Container wenn Datenbank Wert 1 ist
- ?>
- <div id="customerWishlistVisible" class="customerWishlistVisible">
- <span style="float: right;"><a href="modules.php?name=Customer_Account&file=customer_wish_lists_send&customers_id=<?php echo (int)$customer_id; ?>"><button id="customerWishlistVisibleButton" class="customerWishlistVisibleButton"><?php echo IMAGE_BUTTON_SEND_WISH_LIST; ?></button></a></span>
- </div>
- <?php
- } else {
- ?>
- <div>
- </div>
- <?php
- }
- ?>
- [/syntax]
Nun wenn via onclick bei den Radioboxen sich der Wert von 1 auf 0 ändert, wird diese Änderung nur nach einen reload übernommen.
Nun hab ich mir überlegt, entweder den div Container des Buttons via Ajax neu zu laden oder Javascript/jQuery Cookies einzusetzen.
Nun bei der Ajax Methode ist die Frage, ob auch die Werte korrekt bei einen Browser reload geladen werden, womit dann die Cookies wegfallen würden.
Oder wäre es sinnvoller Cookies einzusetzen, wenn ja welche?
Die reinen Javascript Cookies oder das jQuery Cookie Plugin?
Und kann ich mit den jQuery Cookie Plugin auch gezielt Werte übergeben, so wie es bei der Session möglich ist?
Oder gibt es bei jQuery noch die Möglichkeit, das beim Browser reload die Radioboxen auf ihren Wert und ob sie gecheckt sind geprüft werden?
MfG
Peter