[1.4.7] number_of_products_new auf Startseite?

MyOOS hat einen Fehler, oder tut nicht das, was Ihr erwartet? Derartige "Unanehmlichkeiten" bitte hier.
Antworten
SEO
Beiträge: 14
Registriert: 05.01.2009, 19:16
Kontaktdaten:

Beitrag von SEO »

Hallo und frohes Neues :rolleyes:

Ich benötige Hilfe. Ich bekomme es alleine nicht hin. Scheinbar habe ich einen denkfehler.

Ich möchte auf der Startseite die Anzahl aller Artikel anzeigen lassen. Prinzipiell wie in der Datei „products_new“.
Das würde dann so aussehen:
angezeigte neue Produkte: 1 bis 10 (von 363 insgesamt)
Mir kommt es dabei nur auf die Gesamtanzahl an. Sonst nichts.
Also habe ich in der language Datei
<!--c1--><div class='codetop'>QUELLTEXT[/align]<div class='codemain'><!--ec1-->$lang['text_display_number_of_products_new_main] = 'aktuelle Artikelanzahl %d';<!--c2-->[/align]<!--ec2-->
angelegt.
Aber <!--c1--><div class='codetop'>QUELLTEXT[/align]<div class='codemain'><!--ec1-->%d<!--c2-->[/align]<!--ec2--> rafft er ja nur in der „products_new“ datei.

Wie bekomme ich es hin, dass mir die Artikel auch auf der Startseite angezeigt werden. Irgendwo muss ich das ja definieren können.

Vielen Dank für eure Hilfe
r23
Beiträge: 2696
Registriert: 18.09.2008, 05:56
Wohnort: Hagen
Kontaktdaten:

Beitrag von r23 »

Hallo,

dies ist relativ kompliziert ;) wenn man meine antwort nicht versteht, bitte noch einmal nachfragen.

Die Datenbankabfrage sollte kein Problem sein? Falls doch, bitte eben die MyOOS Version nennen.. Für den SQL Befehl benötige ich dann die MyOOS Version.


~/shop/includes/pages/main/main.php

<!--c1--><div class='codetop'>QUELLTEXT[/align]<div class='codemain'><!--ec1-->// super sql ergebnis
$nProductCount = *zahl aus der Datenbank*;

// assign Smarty variables;
$oSmarty->assign(
array(
'oos_breadcrumb' => $oBreadcrumb->trail(BREADCRUMB_SEPARATOR),
'oos_heading_title' => $heading_title,
'oos_heading_image' => 'default.gif',

'product_count' => $nProductCount
)
);<!--c2-->[/align]<!--ec2-->

Hiermit würde die Zahl an das template übergeben und kann dann im Template mit

<!--c1--><div class='codetop'>QUELLTEXT[/align]<div class='codemain'><!--ec1-->({$product_count|string_format:$lang.text_display_number_of_products_new_main})<!--c2-->[/align]<!--ec2-->


ausgegeben werden.

Informationen über string_format im Smarty Handbuch
http://smarty.net/manual/de/language.mo ... format.php


Oder gibt den Text an das Template

~/shop/includes/pages/main/main.php
<!--c1--><div class='codetop'>QUELLTEXT[/align]<div class='codemain'><!--ec1-->// super sql ergebnis
$nProductCount = *zahl aus der Datenbank*;
$sProductCount = sprintf($aLang['text_display_number_of_products_new_main], $nProductCount);

// assign Smarty variables;
$oSmarty->assign(
array(
'oos_breadcrumb' => $oBreadcrumb->trail(BREADCRUMB_SEPARATOR),
'oos_heading_title' => $heading_title,
'oos_heading_image' => 'default.gif',

'product_count' => $sProductCount
)
);<!--c2-->[/align]<!--ec2-->

im Template dann nur noch

<!--c1--><div class='codetop'>QUELLTEXT[/align]<div class='codemain'><!--ec1-->{$product_count}<!--c2-->[/align]<!--ec2-->

cu

r23

Bitte bei Fragen immer die Shop Version angeben. Die Antwort verwendet Code Style der aktuellen Version und kann
somit abweichen.
SEO
Beiträge: 14
Registriert: 05.01.2009, 19:16
Kontaktdaten:

Beitrag von SEO »

Hallo

danke für den schnellen Support.

Ich arbeite noch mit der alten Version. OOS 1.4.7 und php 4.4 / mysql4.1.13

Die Datenbankabfrage bekomme ich doch nicht hin. Herrje

Das Template ist dann doch die main.html oder? Könnte ich das auch direkt in der main_main.php unter languages einbinden?

Grüsse und Danke
r23
Beiträge: 2696
Registriert: 18.09.2008, 05:56
Wohnort: Hagen
Kontaktdaten:

Beitrag von r23 »

Hallo,

die Änderungen werden nur in der
~/shop/includes/pages/main.php

durchgeführt.

Nach Zeile 58

<!--c1--><div class='codetop'>QUELLTEXT[/align]<div class='codemain'><!--ec1--> // default<!--c2-->[/align]<!--ec2-->

Fügst du deine Datenbankabfrage ein.

<!--c1--><div class='codetop'>QUELLTEXT[/align]<div class='codemain'><!--ec1--> $products_result = $db->Execute("SELECT COUNT(*) AS count FROM " . $oosDBTable['products] . " WHERE products_status >= '1'");
$nProductCount = $products_result->fields;<!--c2-->[/align]<!--ec2-->

Mit
<!--c1--><div class='codetop'>QUELLTEXT[/align]<div class='codemain'><!--ec1-->echo $nProductCount;<!--c2-->[/align]<!--ec2-->

überprüfst du den Wert.

Wenn das Ergebnis stimmt, fügst du das Ergebnis in deinen Text ein.

<!--c1--><div class='codetop'>QUELLTEXT[/align]<div class='codemain'><!--ec1-->$sProductCount = sprintf($lang['text_display_number_of_products_new_main], $nProductCount);<!--c2-->[/align]<!--ec2-->

Mit
<!--c1--><div class='codetop'>QUELLTEXT[/align]<div class='codemain'><!--ec1-->echo $sProductCount;<!--c2-->[/align]<!--ec2-->

kannst du den Text prüfen.

Wenn der Text stimmt, gibst du den Text an das Template weiter.

Nach Zeile 77
<!--c1--><div class='codetop'>QUELLTEXT[/align]<div class='codemain'><!--ec1--> $smarty->assign(array('oos_breadcrumb' => $breadcrumb->trail(BREADCRUMB_SEPARATOR),
'oos_heading_title' => $heading_title,
'oos_heading_image' => 'default.png'));<!--c2-->[/align]<!--ec2-->

Fügst du ein.
<!--c1--><div class='codetop'>QUELLTEXT[/align]<div class='codemain'><!--ec1-->$smarty->assign('product_count', $sProductCount);<!--c2-->[/align]<!--ec2-->

Du schaltest den Shop in den Debug-Modus
Zeile 27 in
~/shop/includes/oos_main.php

<!--c1--><div class='codetop'>QUELLTEXT[/align]<div class='codemain'><!--ec1--> $debug = 'true';<!--c2-->[/align]<!--ec2-->

Und prüfst in der Konsohle, ob der Wert übertragen wird und welche Templates du diesen
Wert nun verwenden kannst.

Du suchst dir ein Template aus.

z.b.
~/oos_temp/templates/oos/system/main.html
und fügst die Textausgabe ein.

<!--c1--><div class='codetop'>QUELLTEXT[/align]<div class='codemain'><!--ec1--><{$product_count}><!--c2-->[/align]<!--ec2-->


Hoffe es funtioniert soweit? Wenn nicht, bitte mit Fehlermeldung und Beschreibung posten -
die Antwort wurde nicht geprüft!
r23
SEO
Beiträge: 14
Registriert: 05.01.2009, 19:16
Kontaktdaten:

Beitrag von SEO »

Hi,
ok ich habe die Quelltexte wie folgt angepasst:
includes/pages/main/main.php

Zeile59
<!--c1--><div class='codetop'>QUELLTEXT[/align]<div class='codemain'><!--ec1-->// default
$products_result = $db->Execute("SELECT COUNT(*) AS count FROM " . $oosDBTable['products] . " WHERE products_status >= '1'");
$nProductCount = $products_result->fields;<!--c2-->[/align]<!--ec2-->

und Zeile 83 nach
<!--c1--><div class='codetop'>QUELLTEXT[/align]<div class='codemain'><!--ec1--> $smarty->assign(array('oos_breadcrumb' => $breadcrumb->trail(BREADCRUMB_SEPARATOR),
'oos_heading_title' => $heading_title,
'oos_heading_image' => 'default.png'));<!--c2-->[/align]<!--ec2-->

den Code

<!--c1--><div class='codetop'>QUELLTEXT[/align]<div class='codemain'><!--ec1-->$smarty->assign('product_count', $sProductCount);<!--c2-->[/align]<!--ec2-->

eingefügt.

Also sieht das so aus:
<!--c1--><div class='codetop'>QUELLTEXT[/align]<div class='codemain'><!--ec1-->// default
$products_result = $db->Execute("SELECT COUNT(*) AS count FROM " . $oosDBTable['products] . " WHERE products_status >= '1'");
$nProductCount = $products_result->fields;


$oosOption['template_main] = $theme_set . '/system/main.html';
$oosOption['page_heading] = $theme_set . '/heading/page_heading.html';
// $oosOption['new_news] = $theme_set . '/modules/news/new_news.html';
$oosOption['new_spezials] = $theme_set . '/modules/products/new_spezials.html';
$oosOption['featured] = $theme_set . '/modules/products/featured.html';
$oosOption['new_products] = $theme_set . '/modules/products/new_products.html';
$oosOption['new_news] = $theme_set . '/modules/news/new_news.html';
$oosOption['upcoming_products] = $theme_set . '/modules/products/upcoming_products.html';
$page_type = 1;

require(OOS_INCLUDES . 'oos_system.php');

if (TIME_BASED_GREETING == 'true') {
$heading_title = oosTimeBasedGreeting();
} else {
$heading_title = $lang['heading_title];
}

$smarty->assign(array('oos_breadcrumb' => $breadcrumb->trail(BREADCRUMB_SEPARATOR),
'oos_heading_title' => $heading_title,
'oos_heading_image' => 'default.png'));
$smarty->assign('product_count', $sProductCount);

$smarty->assign('customer_greeting', oosCustomerGreeting());
if ( (USE_CACHE == 'true') && (!SID) && (!isset($_SESSION['customer_id])) ){
$smarty->caching = true;
}<!--c2-->[/align]<!--ec2-->

Dann habe ich in das Template
oos_temo/templates/oos/system/main.html

<!--c1--><div class='codetop'>QUELLTEXT[/align]<div class='codemain'><!--ec1--><td class="main">
<{$lang.text_main}><{$product_count}>
</td><!--c2-->[/align]<!--ec2-->

den product_count eingefügt.

In der language Datei
includes/languages/deu/main_main.php

habe ich in Zeile 38 eingefügt:

<!--c1--><div class='codetop'>QUELLTEXT[/align]<div class='codemain'><!--ec1-->$sProductCount = sprintf($lang['text_display_number_of_products_new_main], $nProductCount);
$lang['table_heading_new_products] = 'Neu in der Datenbank aufgenommen im %s';
$lang[....<!--c2-->[/align]<!--ec2-->

Nun müsste ja zumindest die Anzahl Produkte auf der Startseite angezeigt werden.
Leider wird mir nichts angezeigt. Keine Fehlermeldung und keine Zahl.

Zu meiner Schande. Ich kann mit <!--c1--><div class='codetop'>QUELLTEXT[/align]<div class='codemain'><!--ec1-->echo $nProductCount;<!--c2-->[/align]<!--ec2--> leider nichts anfangen. Wie kann ich das genau abfragen?

Ich bin nun überfragt.

Noch eine Idee

cu

seo
SEO
Beiträge: 14
Registriert: 05.01.2009, 19:16
Kontaktdaten:

Beitrag von SEO »

oh. der Code <!--c1--><div class='codetop'>QUELLTEXT[/align]<div class='codemain'><!--ec1-->...<!--c2-->[/align]<!--ec2--> im Quelltext ist natürlich nicht vorhanden. Wollte eigentlich die Stellen markieren.

sorry
r23
Beiträge: 2696
Registriert: 18.09.2008, 05:56
Wohnort: Hagen
Kontaktdaten:

Beitrag von r23 »

im Quelltext ist natürlich nicht vorhanden. Wollte eigentlich die Stellen markieren.
Es für mich nicht notig, da der Text lesbar für mich ist :)

Antwort mit Lösung folgt...
r23
Beiträge: 2696
Registriert: 18.09.2008, 05:56
Wohnort: Hagen
Kontaktdaten:

Beitrag von r23 »

Hallo,

<!--c1--><div class='codetop'>QUELLTEXT[/align]<div class='codemain'><!--ec1--> // default
$products_result = $db->Execute("SELECT COUNT(*) AS count FROM " . $oosDBTable['products] . " WHERE products_status >= '1'");
$nProductCount = $products_result->fields;<!--c2-->[/align]<!--ec2-->

Hier "darunter" fügt man die Zahl ($nProductCount) in den Text ein ($sProductCount)
s am Anfang steht für string.

<!--c1--><div class='codetop'>QUELLTEXT[/align]<div class='codemain'><!--ec1-->$sProductCount = sprintf($lang['text_display_number_of_products_new_main], $nProductCount);<!--c2-->[/align]<!--ec2-->

also:

<!--c1--><div class='codetop'>QUELLTEXT[/align]<div class='codemain'><!--ec1--> // default
$products_result = $db->Execute("SELECT COUNT(*) AS count FROM " . $oosDBTable['products] . " WHERE products_status >= '1'");
$nProductCount = $products_result->fields;
echo $nProductCount;
echo '<br>';
$sProductCount = sprintf($lang['text_display_number_of_products_new_main], $nProductCount);
echo $sProductCount;<!--c2-->[/align]<!--ec2-->

In der language Datei
includes/languages/deu/main_main.php

habe ich in Zeile 38 eingefügt:
<!--c1--><div class='codetop'>QUELLTEXT[/align]<div class='codemain'><!--ec1-->$sProductCount = sprintf($lang['text_display_number_of_products_new_main], $nProductCount);<!--c2-->[/align]<!--ec2-->
In die Sprachdateien bitte keine Skripte einfügen. Man findet die Fehler nie.... Es funktioniert nicht, da
als die Sprachdatei in die main.php geladen wurde die Variable $nProductCount nicht bekannt war.
(Die Datenbankabfrage erfolgte viel später... )


<!--c1--><div class='codetop'>QUELLTEXT[/align]<div class='codemain'><!--ec1-->$lang['table_heading_new_products] = 'Neu in der Datenbank aufgenommen im %s';<!--c2-->[/align]<!--ec2-->

mmh...
SEO
Beiträge: 14
Registriert: 05.01.2009, 19:16
Kontaktdaten:

Beitrag von SEO »

axo, jetzt verstehe ich das auch mit dem echo.

ok ich hab das soweit angepasst.

den Text gibt er aus. Die Ausgabe der Datenbank funktioniert nicht. Da sagt er nur 1

in der language also:

<!--c1--><div class='codetop'>QUELLTEXT[/align]<div class='codemain'><!--ec1-->$lang['text_display_number_of_products_new_main] = 'Aktuelle Produktanzahl:%d';<!--c2-->[/align]<!--ec2-->

Was er anzeigt:

Aktuelle Produktanzahl: 1


Links oben auf der Startseite oberhalb des Logos sagt er noch folgendes:

Array
Aktuelle Produktanzahl: 1

Sichtbar ausserhalb des eigentlichen Rahmens.

Demnach findet er die Anzahl nicht.
r23
Beiträge: 2696
Registriert: 18.09.2008, 05:56
Wohnort: Hagen
Kontaktdaten:

Beitrag von r23 »

Links oben auf der Startseite oberhalb des Logos sagt er noch folgendes:

Array
Okay ... dann ist

<!--c1--><div class='codetop'>QUELLTEXT[/align]<div class='codemain'><!--ec1-->$nProductCount = $products_result->fields;<!--c2-->[/align]<!--ec2-->

falsch :( sorry... ich arbete schon lange nicht mehr mit der 1.4.x

aus
<!--c1--><div class='codetop'>QUELLTEXT[/align]<div class='codemain'><!--ec1-->$nProductCount = $products_result->fields;<!--c2-->[/align]<!--ec2-->

wird

a = Array
<!--c1--><div class='codetop'>QUELLTEXT[/align]<div class='codemain'><!--ec1-->$aProductCount = $products_result->fields;
echo '<pre>';
print_r($aProductCount);
echo '</pre>';

$nProductCount = $aProductCount['count];
echo $nProductCount;<!--c2-->[/align]<!--ec2-->

hoffe jetzt aber?
SEO
Beiträge: 14
Registriert: 05.01.2009, 19:16
Kontaktdaten:

Beitrag von SEO »

Sodele,

deine Angaben waren super.
Die Datenbank wurde ausgelesen. Es gab noch etwas Kuddelmuddel mit den Bereichen.
So musste a durch n und n durch a ersetzt werden.

So funktioniert es:


<!--c1--><div class='codetop'>QUELLTEXT[/align]<div class='codemain'><!--ec1-->//default
$products_result = $db->Execute("SELECT COUNT(*) AS count FROM " . $oosDBTable['products] . " WHERE products_status >= '1'");
$nProductCount = $products_result->fields;
print_r($aProductCount);
$aProductCount = $nProductCount['count];
$sProductCount = sprintf($lang['text_display_number_of_products_new_main], $aProductCount);<!--c2-->[/align]<!--ec2-->

1000 Dank für diesen tollen Support

SEO
r23
Beiträge: 2696
Registriert: 18.09.2008, 05:56
Wohnort: Hagen
Kontaktdaten:

Beitrag von r23 »

So funktioniert es:
Die Ausgabe (die Zeile) von

<!--c1--><div class='codetop'>QUELLTEXT[/align]<div class='codemain'><!--ec1--> print_r($aProductCount);<!--c2-->[/align]<!--ec2-->

kann noch gelöscht werden... sollte noch gelöscht werden ;)

print_r gibt den Inhalt von dem Array aus... eine der wichtigsten Funktionen in PHP
http://de.php.net/manual/de/function.print-r.php

Wir verwenden im neuen Skripten die Die ungarische Notation

Die ungarische Notation besteht aus detaillierten Richtlinien zur Benennung von Variablen. Diese Notation hat in der Programmierung in C, besonders in der Windows-Welt, weite Verbreitung gefunden. Sie wird "ungarisch" genannt, weil der Vater dieser Notation, Charles Simonyi, ein gebürtiger Ungar ist und die Namen auf den ersten Blick tatsächlich ein wenig fremdländisch wirken.

Ungarische Namen bestehen aus drei Teilen: Basistyp, Präfix und Bezeichner.

Wobei wir dies recht reduzieren....

Präfix a = Array = $aProduct = ( a=>blau, b=grün )
Präfix n = numerischer Wert = $nProduct = 12
Präfix s = string = $sProduct = 'Rotschild Rotwein'
wir verwenden ja nach Lesbarkeit noch den Präfix b für bool

Dies erschwert zwar die Lesbarkeit, hilft aber unheimlich bei der Fehlersuche ... z.b. auch bei deinem Problem.


cu

ralf
SEO
Beiträge: 14
Registriert: 05.01.2009, 19:16
Kontaktdaten:

Beitrag von SEO »

Hi Ralf,

danke für den klasse Support und danke für den Ausflug zur ungarische Notation.
Ist für mich nicht ganz einfach da ich nur Anwender bin und alles im Dreamweaver model. Das Basis Scripting habe ich erst durch diesen Shop gelernt. Daher nutze ich noch die alte Version und bin froh das ich so langsam den Durchblick geschafft habe. Aber sobald es in die Datenbankabfrage geht muss ich passen.
Also Danke.
r23
Beiträge: 2696
Registriert: 18.09.2008, 05:56
Wohnort: Hagen
Kontaktdaten:

Beitrag von r23 »

Aber sobald es in die Datenbankabfrage geht muss ich passen.
Heute gibt es wunderbare Bücher über MySQL
http://dev.mysql.com/doc/refman/5.1/de/index.html

Für den Hausgebrauch würde ich evtl. ein PHPmyAdmin Buch empfehlen.

Bei alten System sichern wir die Datenbank mit einer Funktion aus
PHPmyAdmin... und die hat leider bei Last etwas Probleme.

Hier würde ich dann mir http://mysqldumper.de/ installieren.

Ansonsten kann man hier ja Fragen...
Antworten