First, security:
This pattern is extremely dangerous:
$cookieVal = Mage::app()->getRequest()->getParam('source');
$theCookie = $model->set($cookieName, $cookieVal);
You should never accept user input and shove to a cookie - it gives a would-be attacker the instant ability to set any cookie they want from your domain.
Secondly, cookies:
[Insert "How do they work" meme here]
Cookies are sent back to a user session with the Response
object. If you try to set a cookie after the header of the response you'll likely get this warning in the system.log or the general PHP log:
Cannot modify header information - headers already sent by //...
The only place you should be setting cookies is from within a controller action and before it loads the layout. If you're attempting to set cookies from anywhere else in the application you may have unexpected results.
Finally, your real issue:
Okay, so enough browbeating.
getParam
is a method returned from Zend_Controller_Request_Http
and does a series of tests:
public function getParam($key, $default = null)
{
$keyName = (null !== ($alias = $this->getAlias($key))) ? $alias : $key;
$paramSources = $this->getParamSources();
if (isset($this->_params[$keyName])) {
return $this->_params[$keyName];
} elseif (in_array('_GET', $paramSources) && (isset($_GET[$keyName]))) {
return $_GET[$keyName];
} elseif (in_array('_POST', $paramSources) && (isset($_POST[$keyName]))) {
return $_POST[$keyName];
}
return $default;
}
As you can see, the $default
return value is null
but you can change this with the second parameter. Try testing your return value. If it's null, pass a second parameter to getParam
.
Alternatively, use of getParams
(plural) will return all set parameters in the current request, regardless of the set method - e.g. GET
or POST
. Try doing a var_dump
of getParams
to test if your value is set.
I would also advise against using Mage::app()->getRequest()
if you are within the scope of a controller action - instead use $this->getRequest()
.
Edit:
As @vinai pointed out in your other question, var_dump
and echo
push content to the browser and thus preclude your ability to set cookies.
To save prices per website/store and to avoid getting the 'url_key' error do the following:
foreach ($storeIds as $storeId) {
//load the product with store id
$product = Mage::getModel('catalog/product')
->setStoreId($storeId)
->load($productId);
//Set the store price
$product->setPrice($price);
//To stop Magento regenerating url-key for store, set following,
$product->setUrlKey(false);
//Save the product
$product->save();
}
This has been tested and it works.
Best Answer
Finally I get the solution. Just removed the
time()
key.