Ich greife nochmals den alten Beitrag auf:
[QUOTE=tvtotal;33964]S O R R Y, aber das stimmt nicht. Bsp: Wenn ich bei einem Artikel zunächst [B]nur[/B] das Pic 7 lade und später Pic 5, so werden auch bei 5 die Bilder generiert.[/QUOTE]
Die Umsetzung ist IMHO schlecht.
[B]oxarticle.php[/B]
/**
* Updates count of how many master pictures where used for
* images generation.
*
* @param int $iTotalGenerated total generated images
*
* @return null
*/
public function updateAmountOfGeneratedPictures( $iTotalGenerated )
{
$sQ = "UPDATE oxarticles SET oxpicsgenerated = '$iTotalGenerated' WHERE oxid = '".$this->getId()."'";
oxDb::getDb()->execute($sQ);
$this->oxarticles__oxpicsgenerated = new oxField( $iTotalGenerated );
}
/**
* Checks if article already has generated images from master picture
* specified by index.
*
* @param int $iIndex master picture index
*
* @return bool
*/
protected function _hasGeneratedImage( $iIndex )
{
if ( $iIndex > (int) $this->oxarticles__oxpicsgenerated->value ) {
return false;
}
return true;
}
Hier wird tatsächlich nur nach der höchsten Zahl geprüft bzw. ausgewertet.
Um aber eine kombination aus Boolschen Werten mit einer Integerzahl darzustellen muss man mit Bit-Operatoren arbeiten.
Beispiel (4 Bilder):
Bild 1 => Wert=1
Bild 2 => Wert=2
Bild 3 => Wert=4
Bild 4 => Wert=8
Ein Bild:
1 => 1
2 => 2
3 => 4
4 => 8
Zwei Bilder:
(Bild-Nr. => Formel => Ergebnis)
1+2 => 1^2 => 3
1+3 => 1^4 => 5
1+4 => 1^8 => 9
2+3 => 2^4 => 6
2+4 => 2^8 => 10
3+4 => 4^8 => 12
Drei Bilder:
1+2+3 => 1^2^4 => 7
1+2+4 => 1^2^8 => 11
1+3+4 => 1^4^8 => 13
2+3+4 => 2^4^8 => 14
Vier Bilder:
1+2+3+4 => 1^2^4^8 => 15
So ist eindeutig, welche Bilder bereits berechnet wurden und welche nicht.
Es gibt massig Stellen, wo PHP das genauso handhabt (error_reporting, glob usw.).
Leider ist dies bestimmt kein Bug… funktioniert doch und als Feature Request IMHO überflüssig, da das Prinzip nicht trivial ist und wer wählt schon ein Feature, was er in dem ersten 5 Sekunden nicht versteht.
Ich gehe mal davon aus, wenn dies so umgesetzt worden währe, währe dieser Thread auch wesentlich kürzer.
Da die Bilder nun mal nicht in der DB liegen sondern im Dateisystem, währe IMO die ideale Lösung ein einfaches file_exists() für jedes zu berechnende Bild(von mir aus das Ergebnis auch gecached). Weil selbst wenn die Bilder mittels Bitprüfung auf ihrer Existenz geprüft werden heisst es noch lange nicht, dass sie real im Dateisystem existieren.