Product Url mit PHP Script ermitteln

Hallo,

ich versuche grade eine Autocomplete List mittels jquery, php und MySQL zu implementieren.
Das klappt auch ganz gut soweit.

Die Vorschläge zieht er sich bereits aus oxarticles und schlägt sie vor. Allerdings will ich das ganze noch weiter umsetzen und soll auch bei klick auf den Eintrag den Artikel aufrufen.

Das mit dem aufrufen regel ich selbst noch. Aber mein Hauptproblem besteht darin, dass ich den Product Link ermitteln muss und ich ehrlich gesagt nicht weiß wo ich ansetzen muss.

Wird der Link komplett generiert? Wenn ja mit welcher Funktion und hat vielleicht schon jemand einen Ansatz für mich?

Vielen Dank im Voraus.

du könntest im Template gucken, wie und woher der Link kommt

oder hier gibts eine sourcecode docu:
http://docu.oxid-esales.com/CE/sourcecodedocumentation/
da wählst du die entsprechende Shop Version aus und dann kannst du z.B: links oben “oxarticle” eingeben und so die verfügbaren Funktionen der Klasse oxArticle ansehen

[QUOTE=Krueschi;112407]

Wird der Link komplett generiert? Wenn ja mit welcher Funktion und hat vielleicht schon jemand einen Ansatz für mich?

Vielen Dank im Voraus.[/QUOTE]

erst die Klassen oxarticle (im core) einbinden,
dann das Produkt laden über die OXID mit der Funktion load($oxID)
und dann mit der Funktion getBaseStdLink den Link holen

thats it :slight_smile:

[QUOTE=vanilla thunder;112411]du könntest im Template gucken, wie und woher der Link kommt

oder hier gibts eine sourcecode docu:
http://docu.oxid-esales.com/CE/sourcecodedocumentation/
da wählst du die entsprechende Shop Version aus und dann kannst du z.B: links oben “oxarticle” eingeben und so die verfügbaren Funktionen der Klasse oxArticle ansehen[/QUOTE]

Den Ansatz hatte ich auch schon, aber in den Templates läuft das ganze über Smarty und bringt mir dabei nicht wirklich viel, da ich das ganze in einem PHP Script händle und mir fehlte leider der Ansatz welche Funktion wirklich den reinen link rauszieht.

[QUOTE=patchwork.de;112413]erst die Klassen oxarticle (im core) einbinden,
dann das Produkt laden über die OXID mit der Funktion load($oxID)
und dann mit der Funktion getBaseStdLink den Link holen

thats it :)[/QUOTE]

So hatte ich mir das schon eher vorgestellt… Probiere ich gleich heute Abend mal aus. Danke :slight_smile:

Hi,

Ich hab jetzt schon einmal angefangen und das ganze Script in einen Unterordner von modules eingepflegt.

So sieht mein Script aus:


<?php

	$sOxidConfigDir =  dirname(__FILE__).'/../../';
	function getShopBasePath() 
	{ 
		global $sOxidConfigDir; 
		return $sOxidConfigDir . "/"; 
	} 
	
	// Initalisieren 
	require_once getShopBasePath() . 'core/oxfunctions.php'; 
	require_once getShopBasePath() . 'application/models/oxarticle.php'; 
	
	$pSql = "SELECT oxid FROM oxarticles where oxtitle like '%Wakeboard%'";
	$rows  = oxDb::getDb(true)->Execute($pSql);
	
	if( $rows != false && $rows->recordCount() > 0 ) { 
		
		$cArticle = load($this->rows['oxid'])
		/* Ausgabe */
		echo "<a href='" . $cArticle->getBaseStdLink() . "'></a>";
		
	}

?>

klar, dass das soweit noch nicht funktionieren kann, aber ich hab es erstmal zusammengetan um hinter die Logik steigen zu können.

Allerdings meckert er sogar schon bei mir mit der Datenbankverbindung rum. Er bricht dann immer mit folgender Fehlermeldung ab:

Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 24 bytes

Aber ich hab das schon hochgedreht. ich denke mal da liegt der Fehler schon beim Laden der Klassen.

Vielleicht habt ihr ja grad noch einmal einen Tip für mich. Ich find echt nichts wo jemand etwas vergleichbar ähnliches gemacht hat, so blöd das jetzt auch grade klingt ^^

LG Krueschi

Was du da machst ergibt keinen Sinn - es gibt in Oxid keine Funktion namens “load”. Das ist eine Klassenfunktion von oxBase:

$oArticle = oxNew('oxarticle');
$oArticle->load($sOxid);

Und ob das mit deinem DB Zugriff klappt weiß ich auch nicht - ich hatte das so im Kopf:

$rs = oxDb::GetDb()->Execute('SELECT oxid FROM bla');
while(!$rs->EOF){
  $sOxid = $rs->fields[0];
  ...
  $rs->MoveNext();
}

Ok das macht Sinn… nicht verstehen tu ich aber, warum mein Script immer abspackt sobald ich die oxfunctions.php lade.

require_once OX_BASE_PATH . 'core/oxfunctions.php';

Kommt sofort :

Fatal error: Allowed memory size of 1073741824 bytes exhausted (tried to allocate 65488 bytes) in C:\xampp\htdocs\Oxid\core\oxutilsobject.php on line 684

Und ich hab das Testweise schon auf 1 GB testweise hochgeschraubt ^^
Es handelt sich hierbei um einen frisch aufgesetzten Shop.

Include einfach das hier vor deinem Script:

<?php

// Setting error reporting mode
// some 3rd party libraries still use deprecated functions
if ( defined( 'E_DEPRECATED' ) ) {
    error_reporting( E_ALL ^ E_NOTICE ^ E_DEPRECATED );
} else {
    error_reporting( E_ALL ^ E_NOTICE );
}

//Know exactly where in the code the event occurred.
//Zend platform only.
if (function_exists('monitor_set_aggregation_hint') && isset($_REQUEST['cl'])) {
    $sAgregationHint = htmlentities($_REQUEST['cl'], ENT_QUOTES, 'UTF-8') . '/';
    if (isset($_REQUEST['fnc']))
        $sAgregationHint .= htmlentities($_REQUEST['fnc'], ENT_QUOTES, 'UTF-8');
    monitor_set_aggregation_hint($sAgregationHint);
}


//setting basic configuration parameters
ini_set('session.name', 'sid' );
ini_set('session.use_cookies', 0 );
ini_set('session.use_trans_sid', 0);
ini_set('url_rewriter.tags', '');
ini_set('magic_quotes_runtime', 0);

/**
 * Returns shop base path.
 *
 * @return string
 */
function getShopBasePath()
{
    return realpath(dirname(__FILE__).'/../../../') . '/';
}


if ( !function_exists( 'isAdmin' )) {
    /**
     * Returns false.
     *
     * @return bool
     */
    function isAdmin()
    {
        return false;
    }
}

// custom functions file
require getShopBasePath() . 'modules/functions.php';

// Generic utility method file
require_once getShopBasePath() . 'core/oxfunctions.php';


// set the exception handler already here to catch everything, also uncaught exceptions from the config or utils

// initializes singleton config class
$myConfig = oxConfig::getInstance();

//strips magics quote if any
oxUtils::getInstance()->stripGpcMagicQuotes();

?>

Dabei gehe ich davon aus dass das script in modules/modulordner/subordner/ liegt - wenn das nicht so ist pass einfach die getShopBasePath an. Nach diesem Bootstrapper kannst du alles machen was im Framework so geht.

Hallo Aggrosoft,

danke vorab für dein Script.

Allerdings weist auch dieses den Fehler auf.

zuerst kommt


Fatal error: Cannot redeclare isAdmin() (previously declared in C:\xampp\htdocs\Oxid\core\autosuggest.php:47) in C:\xampp\htdocs\Oxid\core\oxfunctions.php on line 187

Nehme ich folgenden Teil raus:


if ( !function_exists( 'isAdmin' )) { 
    /** 
     * Returns false. 
     * 
     * @return bool 
     */ 
    function isAdmin() 
    { 
        return false; 
    } 
} 

kommt wieder das:

Fatal error: Allowed memory size of 1073741824 bytes exhausted (tried to allocate 65488 bytes) in C:\xampp\htdocs\Oxid\core\oxutilsobject.php on line 684

Kann das sein, dass das an XAMPP liegt?
Hab es jetzt auf 2 Rechnern getestet.

Konntest du dein Problem bereits lösen?
Ich habe genau das selbe Problem. Es kommt bei meinem kleinen Skript immer ein Fatal Error.
Man muss nur die core/oxfunctions.php Includen und schon kommt der Fehler.
Habe aufm Server und Lokal schonmal 1000 MB memory_limit eingestellt und klappt leider nicht.
Kann man sonst eigene Skripte anders aufrufen?

Gruß