Issue with price format on Product Page (getPriceHtml) - javascript

I'm having troubles with the price formatting on a product page of a downloadable product.
The format (as defined globally) should be EUR 15.23. It work's fine in the sidebars, category pages, homepage and so on.
Anyway, on the product page the price is shown wrong (without space): EUR15.23
catalog/product/view.phtml:
//calling once - price EUR15.23
<?php echo $this->getPriceHtml($_product, true); ?>
//calling twice - first price EUR15.23 second price EUR 15.23 (correct)
<?php echo $this->getPriceHtml($_product, true); ?>
same problem when calling:
<?php echo $this->getChildHtml('product_type_data'); ?>
I think it has to do with the reloadPrice : function() JavaScript Code in
downloadable/catalog/product/links.phtml
Anyone also had this problem?
Actually I don't want to get through the JavaScript-Code and change something here as I do not want to change the core files.
Thanks!

Sure it isn't right solution, but if I got you right and it is always true that "first price EUR15.23 second price EUR 15.23 (correct)", then why not just
<?php $this->getPriceHtml($_product, true); // no output ?>
<?php echo $this->getPriceHtml($_product, true); // correct output ?>

Related

PHP get information from database when echoed html code is clicked

In my code, I am retrieving data from the database using a while loop so i can have all the $FormData['fullname'] in the db.
What i want to do is, have each name display on the page and also have clickable so when someone clicks a name, it gets their user_id and pulls up information about them.
The problem i am having is that I can't figure out a way to make a it so where i can get the user_id when the user clicks a name. I tried putting a "name" in the button attribute and I checked if isset() but that didn't work.
If someone can properly figure out a way for me to basically, display all the fullnames in my database and when someone clicks a name, it pulls up information about them that is stored in the database. Here is my code
$stmtGet = $handler->prepare("SELECT * FROM formdata");
$stmtGet->execute();
while($formData = $stmtGet->fetch()){
echo "<button name='name'>$formData[fullname]</button>";
if($_SERVER['REQUEST_METHOD'] =="POST"){
if(isset($_POST['name'])){
echo "ok";
}else{
echo "bad";
}
}
}
As far i can see you are trying hit a button inside the while loop , i would not say its a bad approach , but i will suggest you not to do that . and from your code i can see you have lack of understanding post and get request learn from here . and other than this you need to know the transition of web url . how its actually works . anyway , i have given a sample code without . i hope it will help you understanding this concept.
$stmtGet = $handler->prepare("SELECT * FROM formdata");
$stmtGet->execute();
while($formData = $stmtGet->fetch(PDO::FETCH_ASSOC)){
$id = $formData['formdataid'];
echo "<a href='somepagename.php?infoid={$id}'>". $formData['fullname']."</a></br>";
}
now in the somepagename.php file or in the same page you can actually show the details information for instance
if(isset($_GET['infoid'])){
$stmt = $handler->prepare("select * from formdata where formdataid='"$_GET['infoid']"'");
$qry = $stmt->execute();
$row = $qry->fetch(PDO::FETCH_ASSOC);
echo "<p>id =".$row['formdataid']."</p></br>";
echo "<p>id =".$row['name']."</p></br>";
echo "<p>id =".$row['email']."</p></br>";
echo "<p>id =".$row['address']."</p></br>";
code is not executed , it may have semicolon or comma error warning . you have to fix those on your own . this example above shown you only the way it works .
if still you have problem ask , or see the documentation
I should stress that this is not production code and you should totally validate the data input coming in before posting queries to your DB. You can do something like this.
<?php
// Connect
$connection = mysqli_connect('localhost', 'username', 'password', 'database','port');
// Grab all users
$sql = 'SELECT * FROM users';
$users = mysqli_query($connection, $sql);
if (($_SERVER['REQUEST_METHOD'] == 'POST') && !empty($_POST['user_id'])) {
$query = "SELECT * FROM users WHERE user_id = {$_POST['user_id']};";
$user = mysqli_fetch_assoc(mysqli_query($connection, $query));
}
?>
// This only runs if our $user variable is set.
<?php if (isset($user)) : ?>
<?php foreach ($user as $key => $value) : ?>
<span><?= print_r($value) ?></span>
<?php endforeach; ?>
<?php endif; ?>
// Display all users in a dropdown and when the button is clicked
// submit it via post to this page.
<form action="<?= $_SERVER['PHP_SELF'] ?>" method="post">
<select name="user_id">
<?php foreach ($users as $user) : ?>
<option value="<?= $user['user_id'] ?>"><?= $user['name'] ?></option>
<?php endforeach; ?>
</select>
<button type="submit">Submit</button>
</form>
This is going to refresh your page every time. If you want to have an interactive page you are going to need to use JavaScript/AJAX to update the page elements without reloading the page. This example just demonstrates how you can achieve this with PHP and HTML.
you need to know about server-side language(php) and client-side language(javascript).
php runs before page loaded. it cannot runs when click something by itself(with ajax, it can).
most interactions without page move runs with javascript.
in your case, there are two methods.
store all information into hidden input or button's attribute. and get them by user_id via javascript.
use ajax to call another php that can select informations you need by user_id.
both use javascript or jquery. so you must learn about them.

Displaying a number from the database in a javascript alert box

The following code is to used to display an alert box with the order number when a html form is submitted successfully!
$mysql="SELECT MAX(OrderNo.) FROM `order` ";
$results=mysqli_query($db,$mysql);
$row=mysqli_fetch_array($results);
echo '<script type="text/javascript">';
echo 'alert("Successful signup your order number is"';
echo $row['OrderNo.'];
echo ")";
echo '</script>';
Though the alert box appears with "Successful signup your order number is" part, the OrderNo. part(retrieved from a databse table) does not appear in the alert box! Here max is used because the latest orderNo. is to be displayed and the OrderNo. field is auto incremented.
please help me to correct this error
You are not closing double quotes correctly.
It should be:
echo 'alert("Successful signup your order number is ';
echo $row['OrderNo.'];
echo '")';
Or better:
echo 'alert("Successful signup your order number is '.$row['OrderNo.'].'")';
Try to create an alias for the grouped number like this:
SELECT MAX(OrderNo) AS number FROM order
And show with:
echo 'alert("Successful signup your order number is' . $row['number'] . '")';

how can i show php variable value to a dialogue box using javascript

sir i have got a problem with my project i calculated the sum of certain things in PHP variable say $sum, now i want to show its value in a dialogue box like sum of that particular things=that calculated sum using java script how will i do that?here is what i wrote,its not working what will i do?where sum1 is the variable value i want to print in the JavaScript dialogue box and size13 to size24 i calculated using some sql query .
index.php
<?php>
$sum1=$size13+$size14+$size15+$size16+$size17+$size18+$size19+$size20+$size21+$size22+$size23+$size24;
echo '<script type="text/javascript">
alert("Total Traffic-violation Solved During the year -2014-");
echo $sum1;
window.location=\'index.php\';</script>';
<?>
Change the alert to:
alert("Total Traffic-violation Solved During the year -2014-'.$sum1.'");
Concatenate the sum into the string.
Also, you begin with <?php and end with ?>, not <?php> and <?> - or are you using a very very weird php parser?
Try this, use $sum1 variable inside js alert() function;
<?php>
$sum1=$size13+$size14+$size15+$size16+$size17+$size18+$size19+$size20+$size21+$size22+$size23+$size24;
echo '<script type="text/javascript">
alert("Total Traffic-violation Solved During the year -2014- '.$sum1.'");
window.location=\'index.php\';
</script>';
?>
OR
<script type="text/javascript">
alert("Total Traffic-violation Solved During the year -2014- <?php echo $sum1; ?>");
window.location=\'index.php\';
</script>
This will work:
<?php
$sum1 = 50;
echo '<script type="text/javascript">
alert("Total Traffic-violation Solved During the year -2014-: '.$sum1.'");
window.location=\'index.php\';
</script>';
?>
Just changed your sums etc...
You should use next line
alert("Total Traffic-violation Solved During the year -2014-'.$sum1.'");

Changing URL and retaining values on dropdown onChange event

I have created a Magento site that has Japanese and English store. For both of these stores, I have almost the same products. I just added additional attributes to add the english texts where necessary such as the name. So for example, in my Japanese store, the product's name is "靴" then in English store it's "Shoes". Given this, I have to make adjustments to my url and breadcrumbs to accommodate both languages.
Anyway, I added a currency selector for my English store which works perfectly. The only problem I'm having with it is that it reloads my page completely and the changes I made in the url and breadcrumbs disappear and goes back to default. My url and breadcrumbs should look like this in the English store:
url: http://mywebsite.com/mycategory/shoes.html?cat=mycategory&prod=shoes
breadcrumbs: Home > My Category > Shoes
But whenever I try to change the currency, it reloads my page and I end up with this url and breadcrumb:
url: http://mywebsite.com/mycategory/shoes.html
breadcrumbs: Home > My Category > 靴
The code for my currency dropdown looks like so:
<?php $_product = Mage::registry('current_product');
$root = Mage::app()->getStore()->getRootCategoryId();
//UPDATE:
$currency = Mage::app()->getRequest()->getParam('currency');
Mage::app()->getStore()->setCurrentCurrencyCode($currency);
//if I try to echo these two, it both returns the correct current currency
$cats = $_product->getCategoryCollection()
->addAttributeToSelect('name')
->addAttributeToFilter('parent_id', $root);
foreach($cats as $_cat):
$cat_name = $_cat->getName();
endforeach;
//UPDATE:
$productUrl = $_product->getProductUrl."?cat=".urlencode($cat_name)."&prodname=".urlencode($_product->getName_en());
if($this->getCurrencyCount() > 1): ?>
<label for="custom-currency-selector"><?php echo $this->__('Select Currency:') ?></label>
//UPDATE: changed window.location.href to setLocation
<select onchange="setLocation('<?php echo $productUrl ?>' + '&currency=' + this.value") name="custom-currency-selector" id="custom-currency-selector">
<?php foreach ($this->getCurrencies() as $_code => $_name): ?>
//UPDATE: option value
//if I echo $this->getCurrentCurrencyCode(), its value is different from the current. It returns the previously selected currency
<option value="<?php echo $_code; ?>"
<?php if($_code == $this->getCurrentCurrencyCode()): ?>
selected="SELECTED"
<?php endif; ?>>
<?php echo $_code ?>
</option>
<?php endforeach; ?>
</select>
<?php endif; ?>
I tried changing the onchange event value to window.location.href=this.value+'' but that isn't working at all. My url is not retained. So my question is, how can I change the currency while retaining the changes I created for my url and breadcrumbs?
Update:
As per Natalie's suggestion, I've changed $this->getSwitchCurrencyUrl($_code) to simply $_code and made some more change to my currency.phtml to accommodate my needs. I am now able to retain my url params and change the currency. The problem now is that even though I am able to set the currency programmatically, the select option and currency would not change immediately. For example if my current currency is $ and I try to change to JPY, what happens is it remains $ then for the second time, I select EUR, JPY currency is used instead then the next currency used would be EUR. Basically, my code seems to get the previously selected currency instead of the current one. Why is this happening and how can I fix this?
Are you using Magentos default language/store switcher? If you do, have you created different category names for the Japanese and the English store view? Because then this shouldn't be an issue, magento will save the language/store choice in cookie and then show the categories connected to that store.
Edit: I'm going to add this here instead because a comment is too short:
Sorry. I missed that you hade trouble with adding the params to the original value. You could do what I did when I wanted to change store view and currency on the same button click.
You can set the currency manually yourself instead. If you change the value of the currency dropdown to only contain the currency code like this:
<option value="<?php echo $_code?>" ...
And instead of going to this.value go to the following url on change
onchange="setLocation('?cat=mycategory&prod=shoes&currency='+this.value)"
At the top of your header.phtml file add the following to get the currency param and set the new currency.
if($currency = Mage::app()->getRequest()->getParam('currency')){
Mage::app()->getStore()->setCurrentCurrencyCode($currency);
}
I haven't tested this exact code so I can't guarantee it will work perfectly. But I have myself done a version of it that works great.

Cakephp 2.x - hide/show a combobox

I try to hide/show a combobox, I have 2 combobox and I want the second to be hidden until the first change.
<?php echo $this->Form->input('combobox1'); ?>
<?php echo $this->Form->input('combobox2'); ?>
So I think I need to do something like :
$this->Js->get('#idcombobox2')->effect('hide'); to hide the combobox when the page just load.
And something like :
$this->Js->get('#idcombo1')->event('change', $this->Js->get('#idcombobox2')->effect('show')); cause if the first change I want to show the second.
but this doesn't work.
thanks for your help.
are you including jquery or other framework in the view?
echo $this->Html->script('//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js');
and in case you're outputting it into the <head> with array('inline' => false), make sure to specify the script location in the layout:
echo $scripts_for_layout;
remember you also need to output the buffer in the view:
echo $this->Js->writeBuffer();
edit: the code that actually worked for me:
$event = $this->Js->get('#combo2')->effect('show');
$this->Js->get('#combo1')->event('change', $event);
edit 2: somehow i just got to hide the combo2 using a scriptBlock. so the whole code would go like this
$hide = $this->Js->get('#combo2')->effect('hide');
echo $this->Html->scriptBlock($this->Js->domReady($hide));
$show = $this->Js->get('#combo2')->effect('show');
$this->Js->get('#combo1')->event('change', $show);
echo $this->Js->writeBuffer(array('inline' => false));

Categories