Attribute auslesen

Hey Leute, ich habe noch mal eine kleine Frage.

Ist es Möglich einem Artikel ein Attribut zuzuordnen, ohne dieses immer auszufüllen ?
beispielsweise lege ich ein Attribut an mit dem Author-Name und weisse diesem dann die entsprechenden Artikel zu. Nun muss ich aber bei jedem Artikel die einzelnen Attribute mit einer Value belegen, was auf die Dauer sehr Nerfig ist, vorallem wenn man dann im Endeffekt irgendwann mal X-Tausend Artikel hat, die es zu pflegen gibt usw…

Ich hab als Ziel quasi, dass der Attribute-Title auch dann ausgelesen wird, wenn keine Value vorhanden ist.



[{ assign value=$oView->getAttributes() var="oAttr" name=attribute }]
    [{ if !$oAttr->getValue || !$oAttr->getTitle }]
         [{ $oAttr->getTitle }]
    [{ /if }]



wäre euch echt dankbar wenn ihr mir da helfen könntet.

Vielen Dank im Voraus.
Mit freundlichen Grüssen

Webdesigner_AT

Hat sich erledigt. habe das ganze nun via php und AJAX-Anfrage zur DB gelöst

Hier mal der Code, für alle die es Interessiert und vor selbigen Problem stehen

{dein_template}.tpl



/* DIV für den späteren content des attributes  */

<div id="illustrator_name">    
</div>

[{ oxscript include="your/Script/file.js" }]




/* Javascript File */

var datastring = $("input[name='aid']").val() // Value für datenbankabfrage
// ohne diese gehts NICHT

$.ajax({ 
    type: "POST",
    url: "path_to_php_file.php",
    data: 'datastring='+datastring,
    dataType: "html",   //expect html to be returned

}).done(function(msg){
	$('#illustrator_name').html(msg);
});


Zu guter letzt dann noch die Auswertung in path_to_php_file.php.



header('Content-Type: text/html; charset=ISO-8859-15');
$dbHost 	= 'localhost'; // database host name (default: localhost)
$dbName 	= ''; // database name
$dbUser 	= ''; // database user name
$dbPwd 		= ''; // database password

$url 		        = $_REQUEST['datastring'];
$cnx		= mysql_connect($dbHost, $dbUser, $dbPwd);
$sel 		= mysql_select_db($dbName);

$sqlMain = mysql_query("SELECT * FROM oxobject2attribute WHERE oxobjectid LIKE  '%" . $url . "%' ");
$row=mysql_fetch_array($sqlMain);
$articleID = $row["OXOBJECTID"];
$attributeID = $row["OXATTRID"];

$sqlAttributeID = mysql_query("SELECT * FROM oxattribute WHERE oxid LIKE  '%" . $attributeID . "%' ");
$row2=mysql_fetch_array($sqlAttributeID);

echo $row2["OXTITLE"]; 

?>


Ich hoffe dass du dieses Script so nicht in der Live Umgebung verwendest, das ist extremst anfällig gegen SQL Injection.

Okay, dann war’s wohl nichts. gibt es noch eine andere, sauberere Methode um das umzusetzen?

[QUOTE=Webdesigner_AT;130940]Okay, dann war’s wohl nichts. gibt es noch eine andere, sauberere Methode um das umzusetzen?[/QUOTE]

Nehmen kannst du es, nur bitte google doch mal sql injection und informiere dich darüber. Sonst hast du bald eine Virenschleuder statt einem Shop.

Am besten das OXID Framework im Script mit den entsprechenden MySQL Methoden verwenden, die eine SQL-Insertion verhindern. Irgendwo ist ein Beitrag hier verbuddelt, an dem ich beteiligt war… Falls ich Ihn finden sollte, adde ich hier den Link dazu.

Oder dann so als kleines Beispiel:


<?php
 
  require_once getShopBasePath() . 'bootstrap.php';
         
              
  $dbxparentid = oxDb::getDb()->qstr('' . $_POST['id'] . '');
    
  $sSelect = "SELECT oxartnum, oxvarselect FROM oxarticles WHERE oxparentid = " . $dbxparentid . " AND oxactive = '1' ORDER BY oxsort";
  $rows  = oxDb::getDb( oxDb::FETCH_MODE_ASSOC )->Execute($sSelect);          
  
  if( $rows != false && $rows->recordCount() > 0 ) {
    while(!$rows->EOF) {
    	
      $selected = explode($colorSeparator, $rows->fields["oxartnum"]);
      $varselected = explode('|', $rows->fields["oxvarselect"]);
    	
      $color = trim(strtolower($selected[0]. "-" . $selected[$colorPosition - 1]) . "-" . $varselected[0]);
    
      if(!in_array($color, $selectedarray))	{ 
    		$selectedarray[] = $color;
    	}
    $rows->moveNext();   
    }
  }
  	
  function getShopBasePath() {
    return realpath(dirname(__FILE__)).'/';
  }

Man könnte auch in oxattributelist::loadAttributes folgendes aus dem SQL entfernen:
“and o2a.oxvalue != ‘’”.

[QUOTE=leofonic;130976]Man könnte auch in oxattributelist::loadAttributes folgendes aus dem SQL entfernen:
“and o2a.oxvalue != ‘’”.[/QUOTE]

Danke, ich glaube das ist genau das was ich die ganze zeit suche und ich mach es mir so schwer … ich probier es mal und sage dann bescheid

Sorry die nachfrage, aber…

1.)

In welcher Zeile genau muss ich das löschen ? habe hier 3x den code-Schnipsel gefunden.

jeweils 1x in

Zeile: 119
Zeile: 150
Zeile: 192

oder muss ich es in allen Zeilen rausnehmen?

2.)

Kann ich Die Attribute dann einfach wieder mit der Funktion


[{ assign value=$oView->getAttributes() var="oAttr" name=attribute }] 
[{ if !$oAttr->getValue || !$oAttr->getTitle }] 
     [{ $oAttr->getTitle }] 
[{ /if }] 

abrufen ? oder was muss ich dann machen ? weil egal wo ich den codeschnipsel lösche, ich komme immer zum Ergebnis, dass mir nichts angezeigt wird und die Exception-log datei auch keine Fehler registriert…

-.-

Okay Korrigiere… hatte einen kleinen Fehler in der Abfrage. jetzt funktioniert alles :smiley: danke vielmal für eure Hilfe