De database bevat produkten zonder veldwaarde en word opgehaald met :
<?php
$products_extra_fields_query = tep_db_query("SELECT * FROM " . TABLE_PRODUCTS_TO_PRODUCTS_EXTRA_FIELDS . " WHERE products_id=" . (int)$products['products_id']);
while ($products_extra_fields = tep_db_fetch_array($products_extra_fields_query)) {
$extra_fields_array[$products_extra_fields['products_extra_fields_id']] = $products_extra_fields['products_extra_fields_value']; // VALUE
}

// $extra_fields_names_query = tep_db_query("SELECT * FROM " . TABLE_PRODUCTS_EXTRA_FIELDS. " WHERE (languages_id='0' or languages_id='".(int)$languages[$i]['id']."') and products_extra_fields_id in (120,156) ORDER BY products_extra_fields_order");
$extra_fields_names_query = tep_db_query("SELECT * FROM " . TABLE_PRODUCTS_EXTRA_FIELDS. " WHERE (languages_id='0' or languages_id='".(int)$languages[$i]['id']."') ORDER BY products_extra_fields_order");
while ($extra_fields_names = tep_db_fetch_array($extra_fields_names_query)) {
$extra_field_name[$extra_fields_names['products_extra_fields_id']] = $extra_fields_names['products_extra_fields_name'];
if ($extra_fields_array[$extra_fields_names['products_extra_fields_id']] != '')
echo '<B>'.$extra_fields_names['products_extra_fields_name'].':
</B>&nbsp;'.stripslashes($extra_fields_array[$extra_fields_names['products_extra_fields_id']]).'<BR>'."\n"

}
echo '&nbsp;';
?>
Moet er in het SELECT statement een optie komen om de lege veldwaarden voor bepaalde produkten in de resultaatlijst(resultset) t ekrijgen?
Christiaan Scheermeijer op 05/05/2012 01:30:36

Maakt het beeld niet veel completer, maar waarom gebruik je 2 verschillende extra fields contributions?
De code wat ik je gaf is van `Product Extra Fields` en wat je nu laat zien is van `Extra Product Fields 1.0` voor Online Merchant.

Dat maakt het niet veel duidelijker zeg maar..


Probleem is dat ik deze contributie er niet zelf heb opgezet voor de ajax search
en misschien dat ik weleens een extra fields contributie er eerder heb opgezet..weet het niet meer..viel me al eerder op
Online merchant zegt me niets omdat ik oscommerce gebruik..helaas is dit verwarrend
Ik heb tientallen contributies eropgezet en niet 100 % administratief kloppend dat ik precies weet wat ik gedaan heb
In proncipe zou het met de aanwijzingen te achterhalen zijn
Het is niet goed gedocumenteerd zoals het professioneel zou gebeuren
Ik kan maar één $epf array vinden...
Om het duidelijker te maken, de eerste contributie is voor de `oude` OsCommerce de tweede is voor de nieuwste versie.
De resultaten van het eerste stuk code wat jij liet zien is voor de eerste Contri het gene wat jij wilt veranderen is de tweede Contri.

Helaas heb ik geen ervaring met die tweede en ziet er voor dit tijdstip erg verwarrend uit!

Wat hecht ik toch veel waarde aan OOP/MVC als je dit weer ziet :)
Ik vind leuk dat je probeert een oplossing te vinden voor me..kan zijn dat de russische programmeur die ik hiervoor ingehuurd heb nog met een fix komt
Ik dacht dat het wel relatief eenvoudig op te lossen zou zijn en heb die rus niet nodig, maar ja

Een andere mogelijkheid is dat ik een extra veld toevoeg op de shopadmnistratie die ja of nee laat zien in de kolom van de produktlijst als er een veld is toegevoegd
Liever niet, omdat het extra handelingen zijn

Niet alle contributies zijn meer voor oude versies oscommerce te gebruiken, begrijp ook niet dat er een contributie voor d elaatst eoscommerce versie op deze oud eversie kan werken..misschien weer met een kleine code aanpassing?
Christiann .. bedankt voor je inzet en het is al laat



[size=xsmall]Toevoeging op 05/05/2012 01:52:35:[/size]

Christiaan Scheermeijer op 05/05/2012 01:43:09

Om het duidelijker te maken, de eerste contributie is voor de `oude` OsCommerce de tweede is voor de nieuwste versie.
De resultaten van het eerste stuk code wat jij liet zien is voor de eerste Contri het gene wat jij wilt veranderen is de tweede Contri.

Helaas heb ik geen ervaring met die tweede en ziet er voor dit tijdstip erg verwarrend uit!

Wat hecht ik toch veel waarde aan OOP/MVC als je dit weer ziet :)

Ja dit is verouderde software waar ik nog wat functionaliteit probeer aan toe te voegen, maar de shop draait al 10 jaar
Ik begrijp dat je er niet uitkomt?

Nee dan zou ik eerst die contributie moeten doorlezen (2200 regels) en daarna kijken wat er mis gaat, want dit probleem gaat ook weer samen met Ajax Search begrijp ik..

Ik denk dat jouw programmeur als die het nog herinnerd sneller klaar is dan nu.

Ik heb mijn best gedaan ;)
Christiaan Scheermeijer op 05/05/2012 01:58:48

Nee dan zou ik eerst die contributie moeten doorlezen (2200 regels) en daarna kijken wat er mis gaat, want dit probleem gaat ook weer samen met Ajax Search begrijp ik..

Ik denk dat jouw programmeur als die het nog herinnerd sneller klaar is dan nu.

Ik heb mijn best gedaan ;)


Zeker weten..jammer had ik nog wel wat van je kunnen leren
Bedankt Christiaan!

Ik vind het altijd jammer om te zien dat dit soort gegevens altijd met meerdere queries worden opgehaald, terwijl dat gewoon met één query kan.
Als ik het goed begrijp heb je een tabel met producten, een tabel met extra velden en op die twee een koppeltabel. Een voorbeeld:

SELECT p.prd_name, p.prd_price, pef.label, pef.value [....]
FROM
	(SELECT prd_name, prd_price
	FROM products
	ORDER BY prd_price
	LIMIT 15,15) AS p
LEFT JOIN
	prd_extra_fields_join AS pefj
	ON p.prd_id = pefj_prd_id
LEFT JOIN
	 prd_extra_fields AS pef
	ON pef.pef_id = pefj.pef_id
ORDER BY
	p.prd_price, p.prd_id,  pef.sort_order

Inderdaad om de produktlijst te maken heeft de programmeur 2 queries gebruikt, misschien heeft dat te maken met ophalen vande gegevens met de foreach?

Om dezelfde veldwaarden t ekrijgen nu voor 1 produkt heeft ie wel 1 query gebruikt
<?php
$products_id = (int)$HTTP_GET_VARS['products_id'];

$extra_fields_query = tep_db_query("
SELECT pef.products_extra_fields_status as status, pef.products_extra_fields_name as name, ptf.products_extra_fields_value as value
FROM ". TABLE_PRODUCTS_EXTRA_FIELDS ." pef
LEFT JOIN ". TABLE_PRODUCTS_TO_PRODUCTS_EXTRA_FIELDS ." ptf
ON ptf.products_extra_fields_id=pef.products_extra_fields_id
WHERE ptf.products_id=". (int) $products_id ." and ptf.products_extra_fields_value<>'' and (pef.languages_id='0' or pef.languages_id='".$languages_id."')
ORDER BY products_extra_fields_order");

while ($extra_fields = tep_db_fetch_array($extra_fields_query)) {
if (! $extra_fields['status']) // show only enabled extra field
continue;
echo /* Advance software search bof */ '<tr>

<td>
<table border="0" width="50%" cellspacing="0" cellpadding="2px"><tr>
<td class="main" align="left" vallign="middle" nowrap><b><font size="1" color="#666666">'.$extra_fields['name'].': </b></font></td>';
echo '<td nowrap><font size="1" color="#666666">' .$extra_fields['value'].'<BR></font> </tr>
</table>
</td>
</tr>';

}
?>

Dit zou je nu voor produkten meer dan 1 kunnen gebruiken omhiervan ook een produktlijst te gaan maken?
In een plaatje en in het begin van deze topic heb ik uitgelegd wat die foreach fout doet..dus mogelijk dat het niets met de database zelf te maken heeft?

[size=xsmall]Toevoeging op 05/05/2012 11:46:10:[/size]

http://www.zerospec.com/testmap/produktlijst1produkt.jpg
Laat ik proberen om het programmeerprobleem vereenvoudigen tot het weergeven van d e veldwaarde voor 1 produkt-- zie plaatje
------------------------------------------------------------
De foreach word hier niet meer gebruikt !
-------------------------------------------------
Op de shopadministratie is het mogelijk om in de produktlijst één voor één door de produkten te lopen..je opent de produktinvoer bladzijde voor 1 produkt ( te zien in de produktlijst aan het grijze selectie driehoek ..welk produkt is geselecteerd )

De bestaande code die het éne produkt selecteert moet ook dan de querie die hierboven staat gaan gebruiken, want dat is voor 1 produkt
<?php
$products_id = (int)$HTTP_GET_VARS['products_id'];

$extra_fields_query = tep_db_query("
SELECT pef.products_extra_fields_status as status, pef.products_extra_fields_name as name, ptf.products_extra_fields_value as value
FROM ". TABLE_PRODUCTS_EXTRA_FIELDS ." pef
LEFT JOIN ". TABLE_PRODUCTS_TO_PRODUCTS_EXTRA_FIELDS ." ptf
ON ptf.products_extra_fields_id=pef.products_extra_fields_id
WHERE ptf.products_id=". (int) $products_id ." and ptf.products_extra_fields_value<>'' and (pef.languages_id='0' or pef.languages_id='".$languages_id."')
ORDER BY products_extra_fields_order");

while ($extra_fields = tep_db_fetch_array($extra_fields_query)) {
if (! $extra_fields['status']) // show only enabled extra field
continue;
echo /* Advance software search bof */ '<tr>

<td>
<table border="0" width="50%" cellspacing="0" cellpadding="2px"><tr>
<td class="main" align="left" vallign="middle" nowrap><b><font size="1" color="#666666">'.$extra_fields['name'].': </b></font></td>';
echo '<td nowrap><font size="1" color="#666666">' .$extra_fields['value'].'<BR></font> </tr>
</table>
</td>
</tr>';

}
?>
Opmerking: voor Christiaan zou dit mogelijk wel op te lossen zijn?

Je zit nog steeds met hetzelfde probleem, welke contributie gebruik je of wil je controleren?
Het lijkt me dat je die tweede wil controleren, maar de bovenstaande code is weer voor die eerste..

Ik denk toch dat het handig is als je eerst duidelijk het probleem beschrijft, met de juiste code.
Dus niet verschillende problemen door elkaar..

Het is een beetje een zootje aan het worden. En eerlijk gezegd denk ik dat niemand er wat van snapt :)

Het probleem met 1 query is dat je dan niet de resultaten terug krijgt die niet bestaan (logisch).
Dit is juist zijn probleem, aangezien voor 1 product meerdere rijen in de extra velden tabel staan.

Om te schetsen:

Producten Extra Velden

Product1 - Merk -> Peugeot
Type -> 106
Product2 - Merk -> Honda
Product3 - Merk -> VW
Type -> Golf
Jaar -> 2005
Inderdaad word het zo lastig en de start moet duideljk zijn
Ik heb goed nieuws voor je dat mijn russische programmeur net een uurtje terug me e-mailde dat ie het gefixed had..is een expert.
Inderdaad werkt de foreach() nu correct!..super.
Ik heb er vandaag wel een nieuw ernstig probleem bij gekregen, zodanig dat er geen bestelling meer gedaan kan worden omdat de check-out niet meer werkt.
De payment modules zijnn niet meer te zien..lijkt op een configuratieprobleem
Kan me nog wel iets herinneren dat ik iets aan de database heb toegevoegd..iets met configuratie vorig week..misschien iets overschreven?

Ben blij met de nieuwe functionaliteit en geprobeerd het hier ook op te lossen, maar het probleem duidelijk te presenteren met de ee4nduidge startcode blijkt lastig te zijn..nou ja het is opgelost en nu nog weer de checkout werkend krijgen?
Bedankt!

Reageren