Kategorien
Webdesign

SQL: Was ist das Gegenteil von SELECT TOP?

Angenommen man will die aktuellsten 3 Nachrichten darstellen. Dann sieht das, z.B. für Access/SQL Server, so aus:

SELECT TOP 3 *
FROM News
ORDER BY Date DESC

Alle älteren Nachrichten, außer den 3 Aktuellsten,  sollen nun auf einer Archivseiten dargestellt werden. Und dazu brauchen wir das Gegenteil von SELECT TOP.

SELECT *
FROM News
WHERE ID NOT IN (SELECT TOP 3 ID
               FROM News
               ORDER BY Date DESC)
ORDER BY Date DESC

 

 

 

Kategorien
Webdesign

SQL: Anzahl der Artikel zum Kategorie per Unterabfrage ermitteln

Gegeben sind zwei Tabellen, die mit einem Fremdschlüssel (CategoryID) verbunden sind. Typisch für die Auflistung bei Blogs.

Categories

ID Category
1 Funiture
2 Automobiles
3 Buildings
4 Computer

Articles

ID CategoryID Article
1 1 Table
2 1 Chair
3 2 Car
4 2 Truck
5 3 Skycraper
6 4 Mouse
7 4 Honitor
8 4 Keyboard

Die Anzahl der Artikel erhalten wir per Unterabfrage (SELECT COUNT…). Da einfach die Schlüssel bei der Tabellen verknüpfen.

SELECT Category,
       (SELECT COUNT(*) 
        FROM Articles 
        WHERE CategoryID = Categories.ID) AS Num
FROM Categories
ORDER BY Category;
Category Num
Automobiles 2
Buildings 1
Computer 3
Funiture 2

 

 

 

 

Kategorien
PhotoShop

Photoshop: Tonwertkorrektur im Dialogfenster zurücksetzen

Hat man Einstellungen in der Tonwertkorrektur vorgenommen und will diese rückgängig machen, so muss nicht abgebrochen werden, was ja ein schließen des Dialogfensters zu Folge hätte.

Einfach auf die [Alt] oder [Alt Gr]-Taste gedrückt und aus der Abbrechen-Schaltfläche wird eine Zurück-Schaltfläche!

tonwertkorrektur

Kategorien
Webdesign

FTP-Zugriff per Windows-Explorer

Gerade kein FTP-Client zur Hand? Einfach den Windows-Explorer zum Datei-Upload bzw. -Download verwenden:

ftp://username:passwort@servername
Kategorien
Webdesign

Singleclick FTP-Up/Download per DOS-Batch

Bei Windows ist unter DOS ein FTP-Client vorhanden. Sehr geschickt um Dateien per Klick auf den Server hoch- bzw. runter zu laden. Einziges Manko: Passwörter werden im Klartext gespeichert!

Im folgenden Beispiel wird die Datei „c:\test.txt“ auf den Server www.domain.de in das Verzeichnis „/texte/“ hoch geladen.
Die Zugangsdaten und was gemacht werden soll kommt in die FtpData.ftp:

open ftp.domain.de
FTP-Benutzername
FTP-Passort
cd texte
put c:\test.txt
disconnect
bye

Aufruf über ein Batchfile FtpUpload.bat:

ftp -s:FtpData.ftp

Referenz:
http://eva-marbach.net/handbuch/s-ftp05.htm
http://rotterdam.ics.uci.edu/info/DosFtp.htm
http://www.sabah.net.my/manuals/br/ftp/ftp-msdos.html
http://www.mydigitallife.info/2006/06/30/upload-mput-and-download-mget-multiple-files-automatically-in-ftp-transfer/

Kategorien
PhotoShop

Photoshop Script: Hinweistext in Bild setzen

Diesen Script wird über Adobe Photoshop (CS2) aufgerufen und fügt automatisch einen Hinweistext (z.B. Copyright-Hinweis) unten rechts in Bildern ein.

Vorgehensweise:

  • JavaScript als *.js irgendwo auf dem Rechner speichern
  • Einstellungen im Skript anpassen (einfacher Editor oder ExtendScript Toolkit)
  • Photoshop starten
  • Datei > Skripten > Durchsuchen dann Laden und fertig!
//###################################################################################
//
//  Skript um einen Hinweistext ins Bild zu setzen und als Web-JPEG zu speichern
//
//###################################################################################

// Einstellungen
var picSourcePath = "C:\\Quellordner\\";
var picTargetPath = "C:\\Zielordner\\";
var picText       = "Copyright © 2006 by Name";
var picTextSize   = 10; // Wert in Pixel

//###################################################################################

// Hauptskript...

// Photoshop-Einstellungen sichern
var startRulerUnits = app.preferences.rulerUnits;
var startTypeUnits = app.preferences.typeUnits;
var startDisplayDialogs = app.displayDialogs;

// Dialoge verbergen und Pixel als Einheit einstellen
app.preferences.rulerUnits = Units.PIXELS;
app.preferences.typeUnits = TypeUnits.PIXELS;
app.displayDialogs = DialogModes.NO;

// Liste aller Dateien und Ordner erstellen
var picFolder = Folder(picSourcePath);
var fileList = picFolder.getFiles();

// Pruefung ob auch Dateien und Ordner vorhanden sind
if (picSourcePath != null && picTargetPath != null) {

	// Quellbilder in Schleife oeffnen
	for (var i=0; i<fileList.length; i++) {

		// Nur Dateien (und keine Ordner) oeffnen
		if (fileList[i] instanceof File) {
			open(fileList[i]);

			// schwarzer Text als neue Ebene setzen; ist fuer die Umrandung
			setMyText(picText, picTextSize, "Verdana", "000000", 3, 0,
			activeDocument.width-4, activeDocument.height-4);

			// weisser Text als neue Ebene setzen
			setMyText(picText, picTextSize, "Verdana", "FFFFFF", 3, 0,
			activeDocument.width-4, activeDocument.height-4);

			// Alle Ebenen rastern (um Effekte auf Text anwenden zu koennen)
			activeDocument.rasterizeAllLayers();

			// Auf untere Textebene den Filter Dunkle Bereiche vergroessern, Wert=1px
			activeDocument.artLayers[1].applyMinimum(1);

			// Transparent der unteren Textebene auf 30%, der oberen auf 60%
			activeDocument.artLayers[1].opacity = 30;
			activeDocument.artLayers[0].opacity = 60;

			// Bild als JPG speichern (Fuer Web speichern...)
			var newFileName = fileList[i].name;
			saveWebJpg(newFileName.substring(0, newFileName.length-4) + ".jpg",	picTargetPath, 60);

			// Schliessen ohne Nachfrage
			app.activeDocument.close(SaveOptions.DONOTSAVECHANGES);

		}
	}
}

// Photoshop-Einstellungen zuruecksetzen
app.preferences.rulerUnits = startRulerUnits;
app.preferences.typeUnits = startTypeUnits;
app.displayDialogs = startDisplayDialogs;

alert("Skript fertig :)");

//###################################################################################

// Hilfsfunktionen...

// Funktion um Dokument als Jpeg zu speichern (Fuer Web speichern...)
// Parameter: Dateiname, Pfad mit abschliessendem '\'!, Qualitaet 1-100
// Beispielaufruf: saveWebJpg("test.jpg", "c:\\bilder\\", 75);
function saveWebJpg(jpgName, filePath, jpgQuality ) {
	var saveFile = new File(filePath + jpgName);
	var webJpgOptions = new ExportOptionsSaveForWeb();
	webJpgOptions.format = SaveDocumentType.JPEG;
	webJpgOptions.optimized = true;
	webJpgOptions.quality = jpgQuality;
	activeDocument.exportDocument(saveFile, ExportType.SAVEFORWEB, webJpgOptions);
	File = null; ExportOptionsSaveForWeb = null;
}

// Funktion um Text ins Dokument zu setzen. Neue Textebene wird erstellt.
// Parameter: Text, Groesse, Schriftart, Farbe (Hex), Ausrichtung, Glaettung, PosX, PosY
// Ausrichtung: 1=links, 2=zentriert, 3=rechts; Glaettung: 0=aus; 1=scharf
// Beispielaufruf: setMyText("Mein Text", 10, "Arial", "FF0000", 1, 0, 50, 50);
function setMyText(theTxt, txtSize, txtFont, txtColor, txtAlign, txtAntiAlias, txtPosX, txtPosY) {
	var thisDoc = activeDocument;
	var textColor = new SolidColor;
	textColor.rgb.hexValue = txtColor;
	var myTextLayer = thisDoc.artLayers.add();
	myTextLayer.kind = LayerKind.TEXT;
	myTextLayer.textItem.contents = theTxt;
	myTextLayer.textItem.font = txtFont;
	myTextLayer.textItem.size = txtSize;
	myTextLayer.textItem.color = textColor;
	switch (txtAlign) {
		case 1:  myTextLayer.textItem.justification = Justification.LEFT;   break;
		case 2:  myTextLayer.textItem.justification = Justification.CENTER; break;
		case 3:  myTextLayer.textItem.justification = Justification.RIGHT;  break; }
	switch (txtAntiAlias) {
		case 0:  myTextLayer.textItem.antiAliasMethod = AntiAlias.NONE;  break;
		case 1:  myTextLayer.textItem.antiAliasMethod = AntiAlias.SHARP; break; }
	myTextLayer.textItem.position = Array(txtPosX,txtPosY);
}