Hi everyone,
Im looking for some php help and thought id ask on here … what im trying to do is echo a select input box for each $field but its coming out wrong. I want each field to be in a dropdown (select box) but currently there coming out below one another see here (left side under ‘product filter’) http://essex-laptops.co.uk and i cant understand why. All i can think is im using the foreach command wrong ?
Heres the snippet of the code im working on
echo '<tr><td style="padding:0"><form action="'.$baseurl.'category_id='.$category_id.'&product_type_'.$product_type_id.'_'.$parameter_name.'_comp=in&';
echo 'product_type_'.$product_type_id.'_'.$parameter_name.'[]='.$field.'" method="post" id="postfilter'.$i.'">';
echo '<input type="hidden" name="url_before_filter" value="'.$current_url.'" /> ';
echo '<select name="'.$parameter_name.'"> ';
foreach($fields as $field) {
echo '<option name="verstuur '.$i.'" value="'.$parameter_value.' '.$parameter_unit.' ('.count($db3->record).')" >'.$parameter_value.'</option>';
}
echo '</select> ';
echo '<input type="submit" class="parameter" name="verstuur" />';
echo '</form></td></tr>';
and the entire code
<?php
if( !defined( '_VALID_MOS' ) && !defined( '_JEXEC' ) ) die( 'Direct Access to '.basename(__FILE__).' is not allowed.' );
/**
* Product Filter Module
*
* @copyright (C) 2009 Martijn de Bier
*
* www.virtuemart.net
*/
global $mosConfig_absolute_path, $sess, $VM_LANG;
// Load the virtuemart main parse code
if( file_exists(dirname(__FILE__).'/../../components/com_virtuemart/virtuemart_parser.php' )) {
require_once( dirname(__FILE__).'/../../components/com_virtuemart/virtuemart_parser.php' );
} else {
require_once( dirname(__FILE__).'/../components/com_virtuemart/virtuemart_parser.php' );
}
$text_before = $params->get( 'text_before', '');
$show_linklist = $params->get( 'show_linklist', 1);
$choosen_filters = $params->get( 'choosen_filters', 'Filter(s):');
$remove_filter = $params->get( 'remove_filter', ' x');
$show_total = $params->get( 'show_total', 1);
$withcategories = $params->get( 'withcategories', 0);
$show_child_products = $params->get( 'show_child_products', 1);
$totalproductsbottom = $params->get( 'totalproductsbottom', 'Total:');
$uniqueproductsbottom = $params->get( 'uniqueproductsbottom', 'unique products');
$css_parameter = $params->get( 'css_parameter', '');
$css_parameter_hover = $params->get( 'css_parameter_hover', '');
$css_parameter_label = $params->get( 'css_parameter_label', '');
$css_legend_selected_parameter_header = $params->get( 'css_legend_selected_parameter_header', '');
$css_fieldset_selected_parameter = $params->get( 'css_fieldset_selected_parameter', '');
$css_selected_parameter_text = $params->get( 'css_selected_parameter_text', '');
$category_id = vmGet( $_REQUEST, 'category_id', '' );
$product_type_id = $params->get( 'product_type_id', 1);
$max_filters = $params->get( 'max_filters', 10);
$results_from_url = vmGet( $_REQUEST, 'no', '' ); // Determines number of search results is in URL (only when there are 3 filters)
$got_filters_from_url = explode("[]=",vmGet( $_SERVER, 'REQUEST_URI', null )); // Are there any current filters in URL?
$got_filters = $got_filters_from_url[1]; // Are there any current filters in URL?
$current_url = vmGet( $_SERVER, 'REQUEST_URI', '' );
$sess = new ps_session;
?>
<style type="text/css">
<!--
.parameter {<?php echo $css_parameter ?>}
.parameter_hover {<?php echo $css_parameter_hover ?>}
.parameter_label {<?php echo $css_parameter_label ?>}
.legend_selected_parameter_header {<?php echo $css_legend_selected_parameter_header ?>}
.fieldset_selected_parameter {<?php echo $css_fieldset_selected_parameter ?>}
.selected_parameter_text {<?php echo $css_selected_parameter_text ?>}
-->
</style>
<table width="170" cellpadding="0" cellspacing="0" border="0" id="table_product_filters">
<?php
if (!empty($text_before)) { echo '<tr><td>'.$text_before.'</td></tr>';}
for ($i = 1; $i <= 10; $i++) {
${'db_v'.$i} = new ps_DB;
${'db_v'.$i}->query( "SELECT * FROM #__{vm}_product_type_parameter WHERE product_type_id=$product_type_id AND parameter_list_order=".$i);
${'filter'.$i.'_urlpart'} = 'product_type_'.${'db_v'.$i}->f("product_type_id").'_'.${'db_v'.$i}->f("parameter_name");
${'filter'.$i.'_array'} = vmGet( $_REQUEST, ${'filter'.$i.'_urlpart'}, '' );
${'filter'.$i} = ${'filter'.$i.'_array'}[0];
// Show 'Choosen filters' only when filters in URL
if (!empty($got_filters) && $i==1) { echo '<p class="selected_parameter_text">'.$choosen_filters.' </p>';
}
// Show every filter plus a remove filter button
if (!empty(${'filter'.$i})) {
echo '<tr><td style="padding:0"><fieldset class="fieldset_selected_parameter"><legend class="legend_selected_parameter_header"> ';
echo ${'db_v'.$i}->f("parameter_label").' </legend>';
echo '<form action="'.$mosConfig_live_site;
if (count($got_filters_from_url) == 2) { echo $_POST["url_before_filter"]; }
if (count($got_filters_from_url) != 2) { echo str_replace('&'.${'filter'.$i.'_urlpart'}.'[]='.${'filter'.$i}, NULL, str_replace('%20', ' ', $current_url)); }
echo '" method="post" id="postfilter'.$i.'">';
echo '<p class="selected_parameter_text">'.${'filter'.$i}.' '.${'db_v'.$i}->f("parameter_unit").'';
echo '<input type="hidden" name="url_before_filter" value="'.$_POST["url_before_filter"].'" /> ';
echo '<input style="width: 30px;" type="submit" class="parameter" onmouseover="this.className=\'parameter_hover\'" onmouseout="this.className=\'parameter\'" name="verstuur';
echo $i.'" value=" '.$remove_filter.'"/></p></form></fieldset></td></tr>';
}
}
$query = " SELECT * FROM #__{vm}_product_type_parameter
WHERE product_type_id=$product_type_id
ORDER BY parameter_list_order";
$db = new ps_DB;
$db->query( $query );
$res = $db->record;
foreach( $res as $key1 => $product_parameter_line) {
// Only show parameter label above choosable paramaters when parameter is not selected
for ($i = 1; $i <= $max_filters; $i++) {
if (empty(${'filter'.$i}) && $product_parameter_line->parameter_label==${'db_v'.$i}->f("parameter_label") && count($got_filters_from_url)<4 ) {
echo '<tr><td class="td_parameter_label"><p class="parameter_label">'.$product_parameter_line->parameter_label.'</p></td></tr>';
}
}
// Putting the parameters in an array
$current_parameter_list_order = $product_parameter_line->parameter_list_order;
$db2 = new ps_DB;
$db2->query( " SELECT * FROM #__{vm}_product_type_parameter
WHERE product_type_id=$product_type_id
AND parameter_list_order=$current_parameter_list_order");
$fields=explode(";",$db2->f("parameter_values"));
foreach($fields as $field) {
$baseurl = 'index.php?option=com_virtuemart&page=shop.browse&product_type_id='.$product_type_id.'&';
for ($i = 1; $i <= $max_filters; $i++){
$variable_parameter_name = ${'db_v'.$i}->f("parameter_name");
$variable_parameter_value = ${'filter'.$i};
$parameter_name = $product_parameter_line->parameter_name;
$parameter_unit = $product_parameter_line->parameter_unit;
$parameter_value = $field;
if($show_child_products == 0 ) { $child_or_parent = 'if(b.product_parent_id=0, b.product_id, b.product_parent_id)'; }
if($show_child_products == 1 ) { $child_or_parent = 'b.product_id'; }
if($category_id !=0 && $withcategories == 0) { // Show all within the selected category IF crossfilter with categories is selected from the module settings
$query_filters = " SELECT DISTINCT a.product_id FROM #__{vm}_product_type_$product_type_id a, #__{vm}_product b, #__{vm}_product_category_xref c
WHERE b.product_publish = 'Y' AND a.product_id = b.product_id AND c.product_id = $child_or_parent AND c.category_id = ".$category_id." ";
} else { // Show of all categories if none is selected
$query_filters = " SELECT DISTINCT a.product_id FROM #__{vm}_product_type_$product_type_id a, #__{vm}_product b, #__{vm}_product_category_xref c
WHERE b.product_publish = 'Y' AND a.product_id = b.product_id AND c.product_id = $child_or_parent";
}
if( $product_parameter_line->parameter_list_order<=$max_filters && count($got_filters_from_url)<3){
//All filters empty
if (empty($got_filters) && $product_parameter_line->parameter_name==${'db_v'.$i}->f("parameter_name") ) {
$db3 = new ps_DB;
$db3->query("$query_filters AND $variable_parameter_name='$parameter_value'" );
$dbtotal = new ps_DB;
$dbtotal->query(" $query_filters" );
if (count($db3->record)!=0) {
echo '<tr><td style="padding:0"><form action="'.$baseurl.'category_id='.$category_id.'&product_type_'.$product_type_id.'_'.$parameter_name.'_comp=in&';
echo 'product_type_'.$product_type_id.'_'.$parameter_name.'[]='.$field.'" method="post" id="postfilter'.$i.'">';
echo '<input type="hidden" name="url_before_filter" value="'.$current_url.'" /> ';
echo '<select name="'.$parameter_name.'"> ';
foreach($fields as $field) {
echo '<option name="verstuur '.$i.'" value="'.$parameter_value.' '.$parameter_unit.' ('.count($db3->record).')" >'.$parameter_value.'</option>';
}
echo '</select> ';
echo '<input type="submit" class="parameter" name="verstuur" />';
echo '</form></td></tr>';
}
break;
}
// One filter selected, parameters 1 and 2
if ($i != $db2->f("parameter_list_order") && $product_parameter_line->parameter_list_order==${'db_v'.$db2->f("parameter_list_order")}->f("parameter_list_order")) {
if (!empty(${'filter'.$i}) && empty(${'filter'.$i+1}) && count($got_filters_from_url)<4 ) {
$db3 = new ps_DB;
$db3->query( "$query_filters AND $variable_parameter_name='$variable_parameter_value' AND $parameter_name='$parameter_value'");
$dbtotal = new ps_DB;
$dbtotal->query( "$query_filters AND $variable_parameter_name='$variable_parameter_value'");
if (count($db3->record)!=0) {
echo '<tr><td style="padding:0"><form action="'.$baseurl.'category_id='.$category_id.'&'.${'filter'.$db2->f("parameter_list_order").'_urlpart'}.'_comp=in&';
echo ${'filter'.$db2->f("parameter_list_order").'_urlpart'}.'[]='.$field;
echo '&'.${'filter'.$i.'_urlpart'}.'_comp=in&'.${'filter'.$i.'_urlpart'}.'[]='.${'filter'.$i}.'" method="post" id="postfilter'.$i.'">';
echo '<input type="hidden" name="url_before_filter" value="'.$_POST["url_before_filter"].'" /> ';
echo '<input type="submit" class="parameter" onmouseover="this.className=\'parameter_hover\'" onmouseout="this.className=\'parameter\'" name="verstuur';
echo $i.'" value="'.$parameter_value.' '.$parameter_unit.' ('.count($db3->record).')" /></form></td><tr>';
}
break;
}
}
if ($i != $db2->f("parameter_list_order") && $product_parameter_line->parameter_list_order==${'db_v'.$db2->f("parameter_list_order")}->f("parameter_list_order")) {
if (empty(${'filter'.$i}) && !empty(${'filter'.$i+1}) && count($got_filters_from_url)<4 ) {
$db3 = new ps_DB;
$db3->query( "$query_filters AND $variable_parameter_name='$variable_parameter_value' AND $parameter_name='$parameter_value'");
$dbtotal = new ps_DB;
$dbtotal->query( "$query_filters AND $variable_parameter_name='$variable_parameter_value'");
if (count($db3->record)!=0) {
echo '<tr><td style="padding:0"><form action="'.$baseurl.'category_id='.$category_id.'&'.${'filter'.$db2->f("parameter_list_order").'_urlpart'}.'_comp=in&';
echo ${'filter'.$db2->f("parameter_list_order").'_urlpart'}.'[]='.$field;
echo '&'.${'filter'.$i.'_urlpart'}.'_comp=in&'.${'filter'.$i.'_urlpart'}.'[]='.${'filter'.$i}.'" method="post" id="postfilter'.$i.'">';
echo '<input type="hidden" name="url_before_filter" value="'.$_POST["url_before_filter"].'" /> ';
echo '<input type="submit" class="parameter" onmouseover="this.className=\'parameter_hover\'" onmouseout="this.className=\'parameter\'" name="verstuur';
echo $i.'" value="'.$parameter_value.' '.$parameter_unit.' ('.count($db3->record).')" /></form></td><tr>';
}
break;
}
}
// One filter selected, parameters 1 tot 10
/////////////////////////////////////////////////////////////////////
//////////////////////// ////////////////////////
//////////////////////// NOT IN THIS VERSION ////////////////////////
//////////////////////// ////////////////////////
/////////////////////////////////////////////////////////////////////
// Two filters selected
/////////////////////////////////////////////////////////////////////
//////////////////////// ////////////////////////
//////////////////////// NOT IN THIS VERSION ////////////////////////
//////////////////////// ////////////////////////
/////////////////////////////////////////////////////////////////////
}//END OF if( $product_parameter_line->parameter_list_order<=$max_filters
} // END OF for ($i = 1; $i <= $max_filters; $i++){ LOOP
}//END OF foreach($fields as $field) LOOP
}//END OF foreach( $res as $key1 => $product_parameter_line) LOOP
if ($show_total == 1) {
echo '<tr><td style="padding:0"><br>'.$totalproductsbottom.' ';
if (count($dbtotal->record) != 0 ) { echo count($dbtotal->record);} else {echo $results_from_url;}
echo ' '.$uniqueproductsbottom.'<br></td></tr>';
}
echo '<tr><td style="padding:0"> </td></tr>';
if (!empty($got_filters)) {
echo "<tr><td style=\"padding:3px\"><form action=\"index.php?option=com_virtuemart&Itemid=29 \" method=\"post\" name=\"reset\">\n";
echo "<input type=\"submit\" class=\"button\" name=\"reset\" value=\"";
echo $VM_LANG->_('PHPSHOP_PARAMETER_SEARCH_RESET_FORM') ."\">\n</form></td></tr>";
}
?>
</table>
Id really appreciate if someone could have a quick look at the above and just point me where im going wrong.
Thanks