Hauptmenü

Werkzeuge

Kategorien

Archiv

CSV Download mit Javascript erstellen

Erstellt in Javascript am 14. November 2023 vom Daschmi

Mit folgender JavaScript Funktion kann ein CSV Download aus einem Array initiiert werden.

function downloadCSV(data, filename) {

	const csvContent = "data:text/csv;charset=utf-8," + data.map(row => row.join(",")).join("\n");
	const encodedUri = encodeURI(csvContent);
	const link = document.createElement("a");

	link.setAttribute("href", encodedUri);
	link.setAttribute("download", filename);

	document.body.appendChild(link);

	link.click();

	document.body.removeChild(link);

}

Das ganze wird dann wie folgt aufgerufen:

downloadCSV(csvData, fileName);

Daten zwischen zwei Datumswerten mit PHP im Format YYYY-MM-DD

Erstellt in PHP am 21. Oktober 2023 vom Daschmi

Mit folgender Funktion kann man die Tage zwischen zwei Daten im Format YYYY-MM-DD ermitteln.

/**
 * Gibt einen Array mit Tagen im Format YYYY-MM-DD zurück die zwischen $startDate und $endDate liegen
 *
 * @param string $startDate
 * @param string $endDate
 * @return string[]
 * @throws \Exception
 */
public static function getDatesBetween(string $startDate, string $endDate): array {

	$start = new \DateTime($startDate);
	$end = new \DateTime($endDate);
	$interval = new \DateInterval('P1D');
	$period = new \DatePeriod($start, $interval, $end->modify('+1 day'));

	$arDates = [];

	foreach ($period as $date) $arDates[] = $date->format('Y-m-d');
	
	return $arDates;

}

Bilder bei Upload automatisch auf maximale Auflösung begrenzen mit PHP

Erstellt in PHP am 17. Oktober 2023 vom Daschmi

In der modernen Web-Entwicklung ist das Hochladen von Bildern eine alltägliche Anforderung. Aber wie können wir sicherstellen, dass die hochgeladenen Bilder die richtige Größe haben, um sowohl den Speicherplatz als auch die Ladezeit zu optimieren? In diesem Blog-Beitrag werden wir einen einfachen, aber robusten PHP-Code vorstellen, der nicht nur ein Bild auf den Server lädt, sondern auch seine Abmessungen überprüft und anpasst.

Die Funktion verwendet die PHP-GD-Bibliothek, um die Abmessungen des hochgeladenen Bilds zu erfassen und es bei Bedarf zu skalieren. Falls während des Vorgangs ein Fehler auftritt, fällt die Funktion auf den herkömmlichen move_uploaded_file()-Ansatz zurück, um sicherzustellen, dass der Upload nicht fehlschlägt.

try {
						
	$is = getimagesize($_FILES[$field]['tmp_name']);
	if (!$is) throw new \Exception();
	
	list($width, $height) = $is;
	
	if (!is_numeric($width) || $width <= 0) throw new \Exception();
	if (!is_numeric($height) || $height <= 0) throw new \Exception();
	
	$image = imagecreatefromstring(file_get_contents($_FILES[$field]['tmp_name']));
	if ($image === false) throw new \Exception();
	
	$max_width = 1024; $max_height = 768;
	$ratio = min($max_width / $width, $max_height / $height);
	
	$new_width = $width * $ratio; $new_height = $height * $ratio;
	
	$new_image = imagecreatetruecolor($new_width, $new_height);
	if ($new_image === false) throw new \Exception();
	
	$b = imagecopyresampled($new_image, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
	if ($b === false) throw new \Exception();
	
	$b = imagejpeg($new_image, $path.$filename, 75);
	if ($b === false) throw new \Exception();
	
	imagedestroy($image);
	imagedestroy($new_image);
	
} catch (\Exception $e) {
	
	// Bild alternativ hochladen
	move_uploaded_file($_FILES[$field]['tmp_name'], $path.$filename);
	
}

AbstractConditionViewHelper in TYPO3 11

Erstellt in Extension Entwicklung, TYPO3 am 3. September 2023 vom Daschmi

Ich habe mit TYPO3 einen „inArray“ ViewHelper verwendet, dieser sah in TYPO3 10 wie folgt aus:

class InArrayViewHelper extends \TYPO3Fluid\Fluid\Core\ViewHelper\AbstractConditionViewHelper {  
  
	public function initializeArguments() {  
  
		parent::initializeArguments();  
  
		$this->registerArgument('haystack', 'mixed', 'View helper haystack ', TRUE);  
		$this->registerArgument('needle', 'string', 'View helper needle', TRUE);  
  
	}  

	public function render() {  

		$needle = $this->arguments['needle'];  
		$haystack = $this->arguments['haystack'];  

		if (!is_array($haystack)) {  

			return $this->renderElseChild();  

		}  
	
		if (in_array($needle, $haystack)) {  
	
			return $this->renderThenChild();  
	
		} else {  
	
			return $this->renderElseChild();  
	
		}  

	}

}

Genutzt habe ich ihn zum Beispiel in einem EXT:news Template wie folgt:

<w:inArray haystack="{1:'4',2:'5',3:'6'}" needle="{settings.templateLayout}">  
	<f:then>
		<!-- Template Layout = 4 oder 5 oder 6 -->
	</f:then>	
	<f:else>
		<!-- Sonstiges Template Layout -->
	</f:else>
</w:inArray>

das funktioniert auch noch in TYPO3 11, allerdings nur bis man den Cache aktiviert und die Seite aus dem Cache geladen wird. Wenn man aber statt der render Methode die evaluateCondition Methode überschreibt funktioniert es.

class InArrayViewHelper extends \TYPO3Fluid\Fluid\Core\ViewHelper\AbstractConditionViewHelper {  
  
	public function initializeArguments() {  
  
		parent::initializeArguments();  
  
		$this->registerArgument('haystack', 'mixed', 'View helper haystack ', TRUE);  
		$this->registerArgument('needle', 'string', 'View helper needle', TRUE);  
  
	}  
  
	protected static function evaluateCondition($arguments = null): bool {  
  
		$needle = $arguments['needle'];  
		$haystack = $arguments['haystack'];  
		  
		if (!is_array($haystack)) {  
		  
			return false;  
		  
		}  
		  
		if (in_array($needle, $haystack)) {  
		  
			return true;  
		  
		} else {  
		  
			return false;  
		  
		}  
  
	}  
  
}

So prüfen Sie mit WooCommerce, ob ein Kunde ein Produkt gekauft hat

Erstellt in Allgemein am 27. April 2023 vom Daschmi

Wenn Sie einen WooCommerce-Shop betreiben, kann es nützlich sein zu wissen, ob ein bestimmter Kunde bereits ein bestimmtes Produkt gekauft hat. In diesem Blog-Beitrag zeige ich Ihnen, wie Sie mit einer selbst erstellten Funktion in WooCommerce überprüfen können, ob ein Kunde ein Produkt gekauft hat.

Zunächst müssen Sie die Funktion in Ihrem WooCommerce-Shop einbinden. Öffnen Sie dazu Ihre functions.php-Datei Ihres WordPress-Theme und fügen Sie den folgenden Code am Ende der Datei ein:

abstract class WooHelper {  
     
   public static function check_customer_purchased_product($user_id, $product_id) {  
        
      $customer_orders = \wc_get_orders([  
         'customer_id' => $user_id,  
         'status' => array_keys(\wc_get_order_statuses()),  
      ]);  
    foreach ($customer_orders as $order ) {  
           
         if (self::has_product($order, $product_id)) {  
              
            return true;  
         }  
        
      }  
      
      return false;  
      }  
     
   public static function has_product($order, $product_id) {  
  
      foreach ($order->get_items() as $item) {  
  
         if ($item->get_product_id() == $product_id) {  
  
            return true;  
  
         }  
  
      }  
  
      return false;  
  
   }  
     
}

Sobald Sie den Code in Ihre functions.php-Datei eingefügt haben, können Sie die Funktion in Ihrem Shop verwenden, um zu überprüfen, ob ein Kunde ein bestimmtes Produkt gekauft hat. Die Funktion heißt check_customer_purchased_product und akzeptiert zwei Parameter: user_id (die ID des Kunden, den Sie überprüfen möchten) und product_id (die ID des Produkts, das Sie überprüfen möchten).

if (WooHelper::check_customer_purchased_product($user_id, $product_id)) {
    // Kunden hat das Produkt bereits gekauft
} else {
    // Kunden hat das Produkt noch nicht gekauft
}

Die Funktion durchsucht die Bestellungen des Kunden nach dem angegebenen Produkt und gibt true zurück, wenn der Kunde das Produkt bereits gekauft hat, andernfalls gibt sie false zurück.

Zusammenfassend kann diese selbst erstellte Funktion in WooCommerce nützlich sein, um zu überprüfen, ob ein Kunde bereits ein bestimmtes Produkt gekauft hat. Mit nur wenigen Zeilen Code können Sie diese Funktion in Ihrem Shop implementieren und von ihren Vorteilen profitieren.