You are not logged in.

1

Friday, July 20th 2012, 2:35pm

Portalbox (Letzten 5 Produkte [Kundenbereich])

Hallo zusammen,

ich habe ein kleines Problem und komme mit der Cache-Verarbeitung nicht weiter.

Folgende Datei habe ich für die Portalbox erstellt

PHP Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php
// wcf imports
require_once(WCF_DIR.'lib/system/cache/CacheBuilder.class.php');

class CacheBuilderPortalWebdisk implements CacheBuilder {
    /**
     * @see CacheBuilder::getData()
     */
    public function getData($cacheResource) {
        $data['newDatabaseItems'] = array();

        $sql "SELECT a.name, a.releaseTime, a.active, a.productID, b.public, b.priceLicense, b.productID
            FROM         wcf".WCF_N."_customer_storage a
            LEFT JOIN   wcf".WCF_N."_customer_product b
            ON (a.productID = b.productID)
            WHERE         a.active = 1, b.public = 0
            ORDER BY     a.releaseTime DESC
            LIMIT ".DATABASE_ITEM_VIEW_TOP."";
            
            
        $result WCF::getDB()->sendQuery($sql);
        
        while($row WCF::getDB()->fetchArray($result)) {    
            $data['newDatabaseItems'][] = $row;
        }
        
        return $data;
    }
}
?>


Nun bekomme ich aber diese Fehlermeldung ausgegeben wenn ich das Portal aufrufe:

Quoted

You get more information about the problem in our knowledge base: http://www.woltlab.com/help/?code=1064
Information:

error message: Invalid SQL: SELECT a.name, a.releaseTime, a.active, a.productID, b.public, b.priceLicense, b.productID FROM wcf1_customer_storage a LEFT JOIN wcf1_customer_product b ON (a.productID = b.productID) WHERE a.active = 1, b.public = 0 ORDER BY a.releaseTime DESC LIMIT 5
error code: 1064
sql type: MySQLDatabase
sql error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' b.public = 0 ORDER BY a.releaseTime DESC LIMIT 5' at line 5
sql error number: 1064
sql version:
file: /www/htdocs/w00b2576/sumlinemediade/wcf/lib/system/database/MySQLDatabase.class.php (118)
php version: 5.3.13-nmm1
wcf version: 1.1.9 (Tempest)
date: Fri, 20 Jul 2012 12:03:43 +0000
request: /index.php?page=Portal
referer: http://wbb.sumline-media.de/index.php?pa…=1&categoryID=0
Stacktrace:

#0 /www/htdocs/w00b2576/sumlinemediade/lib/system/cache/CacheBuilderPortalWebdisk.class.php(31): MySQLDatabase->sendQuery('SELECT a.name, ...')
#1 /www/htdocs/w00b2576/sumlinemediade/wcf/lib/system/cache/CacheHandler.class.php(173): CacheBuilderPortalWebdisk->getData(Array)
#2 /www/htdocs/w00b2576/sumlinemediade/wcf/lib/system/cache/CacheHandler.class.php(126): CacheHandler->rebuild(Array)
#3 /www/htdocs/w00b2576/sumlinemediade/lib/system/portalbox/cachebuilder/DefaultCacheBuilder.class.php(28): CacheHandler->get('box-19')
#4 /www/htdocs/w00b2576/sumlinemediade/lib/data/boxes/PortalBox.class.php(117): DefaultCacheBuilder->execute('19', 'CacheBuilderPor...', 'type2', '0', '0')
#5 /www/htdocs/w00b2576/sumlinemediade/lib/system/portalbox/PortalBoxFactory.class.php(102): PortalBox->initialize()
#6 /www/htdocs/w00b2576/sumlinemediade/lib/system/portalbox/PortalBoxFactory.class.php(44): PortalBoxFactory->initializeBoxes(false)
#7 /www/htdocs/w00b2576/sumlinemediade/lib/page/PortalPage.class.php(120): PortalBoxFactory->__construct(true, false, true, true, true)
#8 /www/htdocs/w00b2576/sumlinemediade/lib/page/PortalPage.class.php(105): PortalPage::getPortalBoxes()
#9 /www/htdocs/w00b2576/sumlinemediade/wcf/lib/page/AbstractPage.class.php(90): PortalPage->readData()
#10 /www/htdocs/w00b2576/sumlinemediade/lib/page/PortalPage.class.php(147): AbstractPage->show()
#11 /www/htdocs/w00b2576/sumlinemediade/wcf/lib/page/AbstractPage.class.php(46): PortalPage->show()
#12 /www/htdocs/w00b2576/sumlinemediade/wcf/lib/util/RequestHandler.class.php(64): AbstractPage->__construct()
#13 /www/htdocs/w00b2576/sumlinemediade/wcf/lib/util/RequestHandler.class.php(92): RequestHandler->__construct('Portal', Array, 'page')
#14 /www/htdocs/w00b2576/sumlinemediade/index.php(8): RequestHandler::handle(Array)
#15 {main}

Kann mir jemand helfen?

Wenn ich es nur so machen, dann funktioniert das

PHP Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
// wcf imports
require_once(WCF_DIR.'lib/system/cache/CacheBuilder.class.php');

class CacheBuilderPortalWebdisk implements CacheBuilder {
    /**
     * @see CacheBuilder::getData()
     */
    public function getData($cacheResource) {
        $data['newDatabaseItems'] = array();

        $sql "SELECT * 
            FROM         wcf".WCF_N."_customer_storage
            WHERE         `active` = '1'
            ORDER BY     `releaseTime` DESC 
            LIMIT ".DATABASE_ITEM_VIEW_TOP."";
        $result WCF::getDB()->sendQuery($sql);
        
        while($row WCF::getDB()->fetchArray($result)) {    
            $data['newDatabaseItems'][] = $row;
        }
        
        return $data;
    }
}
?>

Aber so habe ich nur den Name, daher muss ich in diese Tabelle

PHP Source code

1
wcf".WCF_N."_customer_product

um den Preis ebenfalls anzuzeigen.

Kann mir jemand helfen?
:D

0xLeon

Member

  • "0xLeon" is male

Posts: 710

Location: Furtwangen

Occupation: Student (Medieninformatik)

  • Send private message

2

Friday, July 20th 2012, 3:00pm

Die WHERE-Clause ist fehlerhaft, die logischen Ausdrücke müssen mit einem logischen Operator verknüpft und nicht per Kommata aufgezählt werden. In deinem Fall benötigst du den AND-Operator.
Meine Pakete
Invitation System – Plugin StoreGithub
Update Files Delete PIP – Plugin StoreGithub
Kein Support via PN oder E-Mail.

3

Friday, July 20th 2012, 3:36pm

Danke, der Fehler ist weg.

Aber nun werden keine Produkte mehr angezeigt.
:D

4

Friday, July 20th 2012, 3:41pm



„Gorgeous designs. We did it. You'll love it.“

5

Friday, July 20th 2012, 3:50pm

Vielen Dank euch zusammen.
Entschuldigt das Crossposting.
Das "AND" hat gereicht um das zu realisieren was ich brauche.
:D

6

Saturday, July 21st 2012, 11:11am

Hallo zusammen,

ich habe noch eine Frage:

Und zwar habe ich eine install.sql angelegt:

MySQL queries

1
ALTER TABLE wcf1_customer_product ADD currency TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL


Ausserdem habe ich ein Update eingebaut:

PHP Source code

1
2
3
$sql "UPDATE wcf".WCF_N."_customer_product
            SET currency = '".DATABASE_ITEM_CURRENCY."'";
WCF::getDB()->sendQuery($sql);


Zu diesem noch die optionen:

XML

1
2
3
4
5
6
7
8
9
10
			<option name="database_item_currency">
				<categoryname>portal.webdisk</categoryname>
				<optiontype>select</optiontype>
				<selectoptions><![CDATA[
0:EURO
1:DOLLAR
				]]></selectoptions>
				<showorder>3</showorder>
				<defaultvalue>0</defaultvalue>
			</option>


Und für das Template:

Template source code

1
{$newDatabaseItem.currency}


Ich möchte also, wenn ich in den optionen EURO auswähle, das dies auch bei den Produkten steht, allerdings funktioniert das nicht.
Hat da auch jemand eine Lösung parat?
:D

Alexander Ebert

WoltLab Developer

  • "Alexander Ebert" is male

Posts: 4,736

Location: Berlin

  • Send private message

7

Saturday, July 21st 2012, 3:18pm

Du kannst das Feld für die Währung auch als VARCHAR(6) anlegen, das verbraucht weniger Speicher :D
Alexander Ebert
Developer WoltLab® GmbH


8

Saturday, July 21st 2012, 5:45pm

Danke für die Info,
allerdings ist dadurch meine Frage nicht beantwortet.
Was mache ich falsch?
:D

0xLeon

Member

  • "0xLeon" is male

Posts: 710

Location: Furtwangen

Occupation: Student (Medieninformatik)

  • Send private message

9

Saturday, July 21st 2012, 8:07pm

Wo wird denn die UPDATE-Abfrage ausgeführt? Ansich sehe ich den Sinn dahinter nicht. Wenn sowieso bei allen Einträgen der selbe Wert gesetzt wird, wieso muss das dann bei jedem Eintrags als Feld dabei stehen?
Meine Pakete
Invitation System – Plugin StoreGithub
Update Files Delete PIP – Plugin StoreGithub
Kein Support via PN oder E-Mail.

10

Saturday, July 21st 2012, 8:26pm

Ich habe keine Ahnung von dem.
Ich teste nur aus.
Ich möchte, das man in den Optionen "EURO" oder "DOLLAR" auswählen kann.
Das soll ebenfalls dann hinter dem Preis angezeigt werden und dazu brauche ich eben die Hilfe von euch.
Wenn das Quatsch ist mit dem Update, dann mache ich das wieder raus, ich dachte das wäre wichtig.
:D

11

Monday, July 23rd 2012, 8:32pm

Ich möchte nun aus dem "wcf1_option" die Währung nun auslesen, aber das funktioniert nicht.

PHP Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
// wcf imports
require_once(WCF_DIR.'lib/system/cache/CacheBuilder.class.php');

class CacheBuilderPortalWebdisk implements CacheBuilder {
    /**
     * @see CacheBuilder::getData()
     */
    public function getData($cacheResource) {
        $data['newDatabaseItems'] = array();

        $sql "SELECT a.name, a.releaseTime, a.active, a.productID, b.public, b.priceLicense, b.productID, c.optionValue
            FROM         wcf".WCF_N."_customer_storage a
            LEFT JOIN   wcf".WCF_N."_customer_product b
            LEFT JOIN   wcf".WCF_N."_option c
            ON (b.productID = a.productID)
            WHERE         a.active = 1 AND b.public = 1 AND c.optionName = 'customer_currency'
            ORDER BY     a.releaseTime DESC
            LIMIT ".DATABASE_ITEM_VIEW_TOP."";
        $result WCF::getDB()->sendQuery($sql);
        
        while($row WCF::getDB()->fetchArray($result)) {    
            $data['newDatabaseItems'][] = $row;
        }
        
        return $data;
    }
}
?>

so auch nicht

PHP Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?php
// wcf imports
require_once(WCF_DIR.'lib/system/cache/CacheBuilder.class.php');

class CacheBuilderPortalWebdisk implements CacheBuilder {
    /**
     * @see CacheBuilder::getData()
     */
    public function getData($cacheResource) {
        $data['newDatabaseItems'] = array();

        $sql "SELECT a.name, a.releaseTime, a.active, a.productID, b.public, b.priceLicense, b.productID
            FROM         wcf".WCF_N."_customer_storage a
            LEFT JOIN   wcf".WCF_N."_customer_product b
            ON (b.productID = a.productID)
            WHERE         a.active = 1 AND b.public = 1
            ORDER BY     a.releaseTime DESC
            LIMIT ".DATABASE_ITEM_VIEW_TOP."";
        $result WCF::getDB()->sendQuery($sql);
        
        $sql "SELECT coptionValue
            FROM         wcf".WCF_N."_option
            WHERE         categoryName = 'customer.currency' AND optionName = 'customer_currency'";
        $result WCF::getDB()->sendQuery($sql);
        
        while($row WCF::getDB()->fetchArray($result)) {    
            $data['newDatabaseItems'][] = $row;
        }
        
        return $data;
    }
}
?>

Eine Fehlermeldung von der oberen Variante ist diese:

Quoted

You get more information about the problem in our knowledge base: http://www.woltlab.com/help/?code=1064

Information:


error message: Invalid SQL: SELECT a.name, a.releaseTime, a.active, a.productID, b.public, b.priceLicense, b.productID, c.optionValue
FROM wcf1_customer_storage a
LEFT JOIN wcf1_customer_product b
LEFT JOIN wcf1_option c
ON (b.productID = a.productID)
WHERE a.active = 1 AND b.public = 1 AND c.optionName = 'customer_currency'
ORDER BY a.releaseTime DESC
LIMIT 5

error code: 1064

sql type: MySQLDatabase
sql error: You have an
error in your SQL syntax; check the manual that corresponds to your
MySQL server version for the right syntax to use near 'WHERE a.active =
1 AND b.public = 1 AND c.optionName = 'customer_currency'
' at line 6
sql error number: 1064
sql version:
file: /www/htdocs/w00b2576/sumlinemediade/wcf/lib/system/database/MySQLDatabase.class.php (118)

php version: 5.3.13-nmm1

wcf version: 1.1.9 (Tempest)

date: Mon, 23 Jul 2012 18:27:29 +0000

request: /index.php?page=Portal

referer: http://wbb.sumline-media.de/index.php?pa…=1&categoryID=0




Stacktrace:

#0 /www/htdocs/w00b2576/sumlinemediade/lib/system/cache/CacheBuilderPortalWebdisk.class.php(20): MySQLDatabase->sendQuery('SELECT a.name, ...')
#1 /www/htdocs/w00b2576/sumlinemediade/wcf/lib/system/cache/CacheHandler.class.php(173): CacheBuilderPortalWebdisk->getData(Array)
#2 /www/htdocs/w00b2576/sumlinemediade/wcf/lib/system/cache/CacheHandler.class.php(126): CacheHandler->rebuild(Array)
#3 /www/htdocs/w00b2576/sumlinemediade/lib/system/portalbox/cachebuilder/DefaultCacheBuilder.class.php(28): CacheHandler->get('box-23')
#4 /www/htdocs/w00b2576/sumlinemediade/lib/data/boxes/PortalBox.class.php(117): DefaultCacheBuilder->execute('23', 'CacheBuilderPor...', 'type2', '0', '0')
#5 /www/htdocs/w00b2576/sumlinemediade/lib/system/portalbox/PortalBoxFactory.class.php(102): PortalBox->initialize()
#6 /www/htdocs/w00b2576/sumlinemediade/lib/system/portalbox/PortalBoxFactory.class.php(44): PortalBoxFactory->initializeBoxes(false)
#7 /www/htdocs/w00b2576/sumlinemediade/lib/page/PortalPage.class.php(120): PortalBoxFactory->__construct(true, false, true, true, true)
#8 /www/htdocs/w00b2576/sumlinemediade/lib/page/PortalPage.class.php(105): PortalPage::getPortalBoxes()
#9 /www/htdocs/w00b2576/sumlinemediade/wcf/lib/page/AbstractPage.class.php(90): PortalPage->readData()
#10 /www/htdocs/w00b2576/sumlinemediade/lib/page/PortalPage.class.php(147): AbstractPage->show()
#11 /www/htdocs/w00b2576/sumlinemediade/wcf/lib/page/AbstractPage.class.php(46): PortalPage->show()
#12 /www/htdocs/w00b2576/sumlinemediade/wcf/lib/util/RequestHandler.class.php(64): AbstractPage->__construct()
#13 /www/htdocs/w00b2576/sumlinemediade/wcf/lib/util/RequestHandler.class.php(92): RequestHandler->__construct('Portal', Array, 'page')
#14 /www/htdocs/w00b2576/sumlinemediade/index.php(8): RequestHandler::handle(Array)
#15 {main}

Kann mir denn da wenigstens jemand helfen?
Sumale.nin has attached the following image:
  • Unbenannt.PNG
:D

Alexander Ebert

WoltLab Developer

  • "Alexander Ebert" is male

Posts: 4,736

Location: Berlin

  • Send private message

12

Monday, July 23rd 2012, 9:12pm

Du könntest dir in Zukunft angewöhnen, richtige Aliase zu nutzen, "a", "b" oder "c" sind einfach nur gruselig. Glaub mir, es kommt der Punkt an dem du dich dafür verfluchen wirst :P

Zu deinem eigentlichen Problem: Du möchtest die wcf1_options-Tabelle per JOIN einbinden, gibst aber keinen Anhaltspunkt für den JOIN. Davon ab, solltest du lieber direkt auf die Konstante "CUSTOMER_CURRENCY" zugreifen, das erspart dir den Join. Auf Basis der Bennung gehe ich davon aus, dass du die Einstellung pro User haben möchtest, wcf1_options ist aber global!
Alexander Ebert
Developer WoltLab® GmbH


13

Tuesday, July 24th 2012, 12:33pm

Hallo Alex, danke für die Tipps!
Wie soll ich denn direkt auf current_curreny zugreifen?
Das die Option global ist, das weis ich. Da im kundenbereich angegeben werden kann welche währung man nutzen möchte, will ich diese Auslesen, wie auf dem Screen zu sehen. Es geht lediglich darum, das hinter jedem Preis die Währung steht, ich wurde mich über den richtigen codeschnipsel freuen.

Lg
:D

Alexander Ebert

WoltLab Developer

  • "Alexander Ebert" is male

Posts: 4,736

Location: Berlin

  • Send private message

14

Tuesday, July 24th 2012, 1:36pm

Die aktuell gesetzte Währung ist über die Konstante CUSTOMER_CURRENCY automatisch verfügbar, da musst du gar nichts für auslesen, die kannst du einfach so benutzen. Oder hast du doppelte Datensätze je Währung?
Alexander Ebert
Developer WoltLab® GmbH


15

Tuesday, July 24th 2012, 3:43pm

Hallo Alex,

Doppelte Datensätze habe ich nicht. Wie lautet denn der Code damit ich das im template ausgebe kann?
:D

Alexander Ebert

WoltLab Developer

  • "Alexander Ebert" is male

Posts: 4,736

Location: Berlin

  • Send private message

16

Tuesday, July 24th 2012, 4:10pm

Template source code

1
{CUSTOMER_CURRENCY}
Alexander Ebert
Developer WoltLab® GmbH


17

Tuesday, July 24th 2012, 5:30pm

Danke, ich teste und melde mich zurück
:D