module overriding in zen cart - module

I am new to Zen Cart and currently working on a project which has custom template. I am now stuck on override of module file new_products.php !! how to override new_products.php ? I want to change HTML in it. how can I do it ? I have made changes in new_products.php itself. I know it is not right way to do it, but I am confused where do I make changes/override module file ?
Here is the code where I made changes in main new_products.php file
while (!$new_products->EOF) {
$products_price = zen_get_products_display_price($new_products->fields['products_id']);
if (!isset($productsInCategory[$new_products->fields['products_id']])) $productsInCategory[$new_products->fields['products_id']] = zen_get_generated_category_path_rev($new_products->fields['master_categories_id']);
$list_box_contents[$row][$col] = array('params' => 'class="centerBoxContentsNew centeredContent back"' . ' ' . 'style="width:' . $col_width . '%;"',
'text' => (($new_products->fields['products_image'] == '' and PRODUCTS_IMAGE_NO_IMAGE_STATUS == 0) ? '' : '<center><h2>'.$new_products->fields['products_name'].'</h2>' . zen_image(DIR_WS_IMAGES . $new_products->fields['products_image'], $new_products->fields['products_name'], IMAGE_PRODUCT_NEW_WIDTH, IMAGE_PRODUCT_NEW_HEIGHT) . '</center>') . '<h3>' . $products_price.'</h3><p>'.$new_products->fields['products_description'].'</p>
<div class="button black"><a href="' . zen_href_link(zen_get_info_page($new_products->fields['products_id']), 'cPath=' . $productsInCategory[$new_products->fields['products_id']] . '&products_id=' . $new_products->fields['products_id']) . '">Add To Cart' .'</div>');
$col ++;
if ($col > (SHOW_PRODUCT_INFO_COLUMNS_NEW_PRODUCTS - 1)) {
$col = 0;
$row ++;
}
$new_products->MoveNextRandom();}

It's perfectly fine to modify new_products.php, but first copy
includes/modules/new_products.php
to
includes/modules/YOUR_TEMPLATE/new_products.php
(where YOUR_TEMPLATE is the name of your custom template).
Then make changes in the file
includes/modules/YOUR_TEMPLATE/new_products.php
You can determine your template name by going to admin->tools->template selection.
If you don't know how to create a custom template in Zen Cart, read this:
http://www.zen-cart.com/content.php?180

Related

Prestashop 1.7.6: Getting and displaying the 2° product image as background in text customization area

I am on prestashop 1.7.6. On the product page: i need to show the second(2°) or third(3°) image as background-image in the textarea text customization (when text customization is active).
example image getting first product image
In the photo attached i get the first image but i don't know how to get the second one.
Can someone help me?
Create a new method in Product.php class, to get the images:
public static function getImagesByID($id_product, $limit = 2){
$id_image = Db::getInstance()->ExecuteS('SELECT `id_image` FROM `'._DB_PREFIX_.'image` WHERE `id_product` = '.(int)($id_product) . ' ORDER BY position ASC LIMIT 1, ' . $limit);
$toReturn = array();
if(!$id_image)
return;
else
foreach($id_image as $image)
$toReturn[] = $id_product . '-' . $image['id_image'];
return $toReturn;
}
And use the static function in the smarty template
{assign var="pImages" value=Product::geImagesByID($product.id_product, 2)}
{foreach from=$pImages item=image name=images}
<img src="{$link->getImageLink($product.link_rewrite, $image, 'home_default')}" {if $smarty.foreach.images.first}class="current img_{$smarty.foreach.images.index}"{else} class="img_{$smarty.foreach.images.index}" style="display:none;"{/if} alt="{$product.legend|escape:'htmlall':'UTF-8'}" {if isset($homeSize)} width="{$homeSize.width}" height="{$homeSize.height}"{/if}/>
{/foreach}

TYPO3 - Add flexform to my own extension

I am building my own extension.
I have found this page about adding Flexform to the Extension
https://gist.github.com/alrnz/c0f00b196d378f5b9150
And in my ext_tables.php i have this:
\TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerPlugin(
$_EXTKEY,
'Xlsxtotables',
'XLSX to tables'
);
// Include flex forms
$pluginSignature = str_replace('_', '', $_EXTKEY) . '_' . 'xlsxtotables'; // from registerPlugin(...)
$TCA['tt_content']['types']['list']['subtypes_addlist'] [$pluginSignature] = 'pi_flexform';
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPiFlexFormValue(
$pluginSignature,
'FILE:EXT:' . $_EXTKEY . '/Configuration/FlexForms/flexform_xlsxtotables.xml'
);
I know that the XML-file is in the right place, but I do not get anyting from it in TYPO3 backend.
Any suggestions?
Try replace
$pluginSignature = str_replace('_', '', $_EXTKEY) . '_' . 'xlsxtotables';
by
$extensionName = strtolower(\TYPO3\CMS\Core\Utility\GeneralUtility::underscoredToUpperCamelCase($_EXTKEY));
$pluginSignature = $extensionName.'_'.'xlsxtotables';
And dont forget to empty your general cache before you see a change with your flexform.
You can try below code in ext_tables.php file
$pluginName = 'Pi1'; // Give Your Plugin Nmae
$pluginSignature = preg_replace('/[^a-z0-9]/', '', strtolower($_EXTKEY)) . '_' . strtolower($pluginName);
// FlexForm configuration
$TCA['tt_content']['types']['list']['subtypes_addlist'][$pluginSignature] = 'pi_flexform';
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPiFlexFormValue(
$pluginSignature,
'FILE:EXT:' . $_EXTKEY . '/Configuration/FlexForms/flexformname.xml'
);
For Adding Flexforms in One or More Front-end plugins you can use Below code in ext_tables.php
$extensionName = \TYPO3\CMS\Core\Utility\GeneralUtility::underscoredToUpperCamelCase($_EXTKEY);
$frontendpluginName = 'xxx'; //Your Front-end Plugin Name
$pluginSignature = strtolower($extensionName) . '_'.strtolower($frontendpluginName);
$GLOBALS['TCA']['tt_content']['types']['list']['subtypes_addlist'][$pluginSignature] = 'pi_flexform';
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPiFlexFormValue($pluginSignature, 'FILE:EXT:' . $_EXTKEY . '/Configuration/FlexForms/xyz.xml');

Display images from protected folder

I have a protected folder within Yii and I'm looking to display some of those images within the site. I've tried the following code and it works within the site/index controller in that it returns just the image I wanted.
However when I tried to separate the code it didn't work. Any help is appreciated.
Model
public function getImage() // will take file identifier as #param
{
$imageID = '2562584569'; // will eventually be dynamically assigned
$image = Images::model()->find('tmp_name=:id', array('id' => $imageID));
$dest = Yii::getPathOfAlias('application.uploads');
$file = $dest .'/' . $image->tmp_name . '.' . $image->extension;
if(file_exists($file)){
ob_clean();
header('Content-Type:' . $image->logo_type);
readfile($file);
exit;
}
}
And in the view
CHtml::link('<img src="' . Yii::app()->request->baseUrl .'/images/image" />', array('product/index', 'id'=>$data['product_id'], 'slug'=> $data['product_slug']));
Thanks
Jonnny
"protected" folder are not accessible from the client browser. This prevents people to have access to important files, like your source code.
If you want to store images inside "protected" and want them to be accessible, you need to publish them using CAssetManager.
Usage is something like:
$path = Yii::app()->basePath.'/path-inside-protected';
$yourImageUrl = Yii::app()->assetManager->publish($path);
Yii will then use the file as an asset, coping it to the "assets" folder, sibling to "protected". After that, you can just use the url returned on your HTML.
<img src="<?php echo $yourImageUrl ?>">
I went about it like this
CHtml::link('<img src="' . $this->createUrl('/images/image', array('data'=>$data['data'])) . '" />', array('product/index', 'id'=>$data['product_id'], 'slug'=> $data['product_slug']));
Model
public function actionImage($data)
{
$image = Images::model()->find('tmp_name=:data', array('id' => $data));
$dest = Yii::getPathOfAlias('application.uploads');
$file = $dest .'/' . $image->tmp_name . '.' . $image->extension;
if(file_exists($file)){
ob_clean();
header('Content-Type:' . $image->logo_type);
readfile($file);
exit;
}
}
Thanks for all help

How to assert the current URL?

I'm unittesting my Yii application with PHPUnit and Selenium-server.
Code:
class StartSurveyRedirectTest extends WebTestCase
{
public $fixtures=array(
'sessions'=>'SurveySession',
'surveys' => 'Survey',
);
public function testActive() {
$survey = $this->surveys('survey_active');
$user_id = 1;
$imid = 'nl1234-9876';
$this->open('veldwerk/survey/redirect?survey_id=' . $survey->survey_id .
'&user_id=' . $user_id .
'&imid=' . $imid .
'&' . $survey->security_parameter_name . '=' . $survey->getSecurityParameterValue()
);
//assert if redirected
$this->assertNotEquals($this->url(),TEST_BASE_URL .
'veldwerk/survey/redirect?survey_id=' . $survey->survey_id .
'&user_id=' . $user_id .
'&imid=' . $imid .
'&' . $survey->security_parameter_name . '=' . $survey->getSecurityParameterValue()
);
}
}
The result when I start the test:
There was 1 error:
1) StartSurveyRedirectTest::testActive
Method url not defined.
D:\workspace\Pi\framework\test\CWebTestCase.php:63
D:\workspace\Pi\protected\tests\functional\StartSurveyRedirectTest.php:27
D:\workspace\Pi\protected\tests\functional\StartSurveyRedirectTest.php:27
Caused by
BadMethodCallException: Method url not defined.
D:\workspace\Pi\framework\test\CWebTestCase.php:63
D:\workspace\Pi\protected\tests\functional\StartSurveyRedirectTest.php:27
D:\workspace\Pi\protected\tests\functional\StartSurveyRedirectTest.php:27
So what I really want to test is if the user has been redirected. I thought the easiest way was to check the URL but it turns out it doesn't work? While in the selenium docs and PHPUnit docs says it can..
Does the Yii framework does not support this? Or am I doing something wrong?
Instead of using url as a method, try it as a property:
$this->url
I'm at work now and am able to check this out. I think the proper code for PHPUnit with Selenium is:
$driver->getCurrentPageUrl();
So it is a method from the driver instance.
Turns out PHPUnit_Extensions_SeleniumTestCase_Driver is an ancestor class of WebTestCase the Yii class I extend in my test.
PHPUnit_Extensions_SeleniumTestCase_Driver implements the method getLocation() which holds the current browser url. This allows me to use $this->getLocation()
SeleniumTestCase_Driver class reference
The result of my code:
//assert if redirected
$this->assertNotEquals($this->getLocation(),TEST_BASE_URL .
'veldwerk/survey/redirect?survey_id=' . $survey->survey_id .
'&user_id=' . $user_id .
'&imid=' . $imid .
'&' . $survey->security_parameter_name . '=' . $survey->getSecurityParameterValue()
);

Video upload with Graph API from user's desktop

i am trying to upload a local video to Facebook through the Graph API.
Here is an example from Facebook:
http://developers.facebook.com/blog/post/493/
That works nice, and i get an JSON response after submitting the from.
How can I get the respone ID, for use in, e.g. Javascript or directly as an GET-parameter on my server?
I don't want to upload the video on an public accessable server and then redirect the video upload to Facebook by using curl or something like that.
Has anyone an idea or an example of how i can get this to work?
Edit:
Here is the example i used:
<?php
$app_id = "YOUR_APP_ID";
$app_secret = "YOUR_APP_SECRET";
$my_url = "YOUR_POST_LOGIN_URL";
$video_title = "YOUR_VIDEO_TITLE";
$video_desc = "YOUR_VIDEO_DESCRIPTION";
$code = $_REQUEST["code"];
if(empty($code)) {
$dialog_url = "http://www.facebook.com/dialog/oauth?client_id="
. $app_id . "&redirect_uri=" . urlencode($my_url)
. "&scope=publish_stream";
echo("<script>top.location.href='" . $dialog_url . "'</script>");
}
$token_url = "https://graph.facebook.com/oauth/access_token?client_id="
. $app_id . "&redirect_uri=" . urlencode($my_url)
. "&client_secret=" . $app_secret
. "&code=" . $code;
$access_token = file_get_contents($token_url);
$post_url = "https://graph-video.facebook.com/me/videos?"
. "title=" . $video_title. "&description=" . $video_desc
. "&". $access_token;
echo '<form enctype="multipart/form-data" action=" '.$post_url.' "
method="POST">';
echo 'Please choose a file:';
echo '<input name="file" type="file">';
echo '<input type="submit" value="Upload" />';
echo '</form>';
?>
Taken from this page: http://developers.facebook.com/blog/post/493/
This is the whole response i get from the form (JSON response):
{
"id": "xxxxx19208xxxxx"
}
The problem is that the JSON response is inline in the page.
I thought to set a target in the form to an inline iframe but then i will not be able to access the JSON code.