Kategorien
Adobe InDesign Script JavaScript

Praktische String Funktionen in Javascript für InDesign und Web

Entfernt führende und beendende Leerzeichen

function trim (str) 
{
  return str.replace (/^\s+/, '').replace (/\s+$/, '');
}

Check, ob ein String leer ist, findet auch z.B. “    “

function isBlank(str) 
{
    return str.replace(/\s/g,"") == ""  ;
}

Checkt, ob ein String enthalten z.B. ob script in javascript enthalten ist – true.

function stringContains(str, needle )
{
    return str.indexOf(needle) != -1    
}
Kategorien
Adobe InDesign Script

InDesgin Script – Text und ParagraphStyle exportieren nach Excel

Ich habe ein kleines Script geschrieben, welches seitenweise die Paragraphen ausliest und den Text sowie den ParagraphStyle in eine csv-Datei schreibt, die in Excel geöffnet werden kann, um so den Text dorthin zu exportieren und später zu übersetzen und zu reimportieren mittels InDesign’s DataMerge. Es wird für jede Seite des Dokuments eine csv-Datei angelegt:

#target InDesign
$.writeln ("extract Paragraph Text");

var allPages= app.activeDocument.pages;
for (i=0; i<allPages.length; i++)
{
    $.writeln (allPages[i].name);
    var allPageTextframes= allPages[i].textFrames;
    var csvPath = app.activeDocument.filePath + "/page" + i + ".csv";
    $.writeln (csvPath);
    var csv = File (csvPath);
    csv.encoding = "CP1252"; //Encoding for Windows/Excel    
    csv.open ("w");
    for (j=0; j<allPageTextframes.length; j++)
    {
        var allPageTextframeParagraphs= allPageTextframes[j].paragraphs;
        for (k=0; k<allPageTextframeParagraphs.length; k++)
        {
            var text = allPageTextframeParagraphs[k].contents;
            var paragraphStyleName = allPageTextframeParagraphs[k].appliedParagraphStyle.name;
            $.writeln (text);
            $.writeln (paragraphStyleName);
            if(text != "")
            {
                    var zeile = paragraphStyleName + " " + j + k + ";" + text;
                    csv.writeln (zeile);
             }
         }
     }
}
Kategorien
Adobe InDesign Script

Adobe InDesign Script – Sprache aller ParagraphStyles ändern

Mit diesem Skript kann man die Sprache aller Paragraph Styles einfach ändern und z.B. auf italienisch setzen:

#target InDesign
$.writeln ("Change Language");
var allParagraphStyles = app.activeDocument.paragraphStyles;
for (i=1; i<allParagraphStyles.length; i++)
{
    $.writeln (allParagraphStyles[i].appliedLanguage.name);
    allParagraphStyles[i].appliedLanguage = "Italian";
    $.writeln (allParagraphStyles[i].appliedLanguage.name);
}

 

Kategorien
Adobe InDesign Script Buch Empfehlungen

Adobe InDesign Scripten mit Javascript Tutorial

Adobe Indesign sowie Photoshop lassen sich mit Javascript plattformübergreifend auf MAC und PC skripten mit der Javascript Erweiterung ExtendScript von Adobe.

Über das Menü Fenster->Hilfsprogramme->Skripte werden die bereits mit gelieferten Skripte angezeigt. Eigene Skripte gehören in den Ordner Benutzer und haben die Endung .jsx. Um im Dateibrowser in das Verzeichnis zu gelangen, wo die Skripte zu finden sind, muss man einfach mit der rechten Maustaste auf das Skript und dann auf „Im Finder öffnen“ klicken, so gelangt man am einfachsten zu den sehr tief verstecktem Ordner. Dort kann man dann neue eigene Skripte anlegen.

Zum testen kann die Datei „changeLanguage.jsx“ im selben Ordner (bei mir /…/Library/Preferences/Adobe InDesign/Version 7.0/en_GB/Scripts/Scripts Panel) angelegt werden. Diese erscheint dann autotmatisch auch in InDesign.

Um die Dati zu bearbeiten, muss man einfach in InDesign rechter Maustaste auf die Datei und Skript bearbeiten auswählen und es öffnet sich der Editor/Light IDE von Adobe: ExtendScript Toolkit.

Wichtig ist, als erstes einzustellen, für welches Programm das Skript laufen soll, in unserem Fall: Adobe InDesign CS5 auswählen im Dropdown oben rechts.

Außerdem sollte die Autovervollständigung aktiviert werden: ExtendScript Toolkit->Voreinstellungen->Hilfe->Autom. Vervollständigung aktivieren.

Beispiel 1: Hallo Welt

Das Hallo Welt ist schnell geschrieben und beinhaltet vorher noch eine Direktive auf InDesign, damit klar ist, für welches Programm das Skript laufen soll:

#target InDesign
alert("Hallo Welt");

Das ganze kann mit F5 oder Apfel+R ausgeführt werden.

Debuggen lässt sehr gut mit der Funktion writln für Strings, die im Fenster Javascript-Konsole ausgegeben wird:

#target InDesign
//alert("Hallo Welt");
$.writeln ("Konsole log");

Ich hatte das Problem, dass Kommentare ausgeblendet wurde, das lag daran, dass die Schriftart für Kommentare nicht installiert war. Einfach Schriftart ändern: ExtendScript Toolkit->Voreinstellungen->Schriften und Farben:

  • alle Anzeigeelemente entkreuzen
  • Comment /**/ ->Schrift: Verdana auswählen
  • Comment // ->Schrift: Verdana auswählen

Eine Referenz/Übersicht über das Objekt Model von InDesign findet man hier.

Kategorien
Amazon MWS PHP

Products API gibt keine richtigen Fehlermledungen nur Fatal Error

Um aus Amazon die richtigen Fehlermeldungen heraus zu kitzeln, müssen die Fatals gefangen werden und ausgegeben, sonst kann man lange suchen:

                try
                {
                    $this->getListMatchingProductsForEanOrQueryData($ean, $country);
                }
                catch(MarketplaceWebServiceProducts_Exception $e)
                {
                    var_dump($e);
                    die();
                }
Kategorien
PHP

Führende Nullen oder Komma am Ende entfernen

Mit den Funktionen ltrim und rtrim lassen sich Leerzeichen und bestimmte störende Buchstaben am Anfang oder am Ende von Strings entfernen.

Bsp. Entfernen von führenden Nullen:

$string = "03423452";
$string = ltrim($string,'0');
//03423452

oder Komma am Ende entfernen

$string = "bla, bla,bla,";
$string = rtrim($string,',');
//bla, bla,bla
Kategorien
PHP XT-Commerce

XTCommerce Sofortüberweisungs Modul leitet bei Abbruch auf Warenkorb weiter

Bei einem Abbruch findet ein Redirect auf den Warenkorb statt, weil die verkaufte Artikel Mange schon um 1 erniedrigt wurde und die Artikel nicht mehr kaufbar sind laut Datenbank.

Deswegen muss in der checkout_payment.php folgender Code eingefügt werden

if($_GET['payment_error'] == 'sofortueberweisung_direct')
{
/*    require (DIR_WS_CLASSES . 'payment.php');
    $payment_modules = new payment('sofortueberweisung_direct');
    if ($confirmation = $payment_modules->confirmation())
    {

    }*/

    require_once (DIR_WS_CLASSES.'order.php');
    require_once (DIR_FS_INC.'xtc_db_query.inc.php');
    require_once (DIR_FS_INC.'xtc_get_prid.inc.php');
    $order = new order();

    for ($i = 0, $n = sizeof($order->products); $i < $n; $i ++)
    {
         xtc_db_query("update ".TABLE_PRODUCTS." set products_quantity = products_quantity + 1 where products_id = '".xtc_get_prid($order->products[$i]['id'])."'");
    }
    unset($order);

}

oberhalb von

// if there is nothing in the customers cart, redirect them to the shopping cart page
if ($_SESSION['cart']->count_contents() < 1)
    xtc_redirect(xtc_href_link(FILENAME_SHOPPING_CART));

 

Kategorien
CSS Web Frontend Webdeveloper Tools

Wieso sollte man kein inline CSS/JS verwenden

Es gilt als schlechter Stil inline CSS zu verwenden:

<span style="color: #666666; display: block; float:left; width: 250px;padding-bottom:5px;">

d.h. das CSS eines Elements direkt über das style Attribut zu aktivieren.

Dasselbe gilt auch für Inline Javascript:

<div></div>
<script type="text/javascript">
    alert("hallo");
</script>

Folgende Gründe gibt es dafür:

Kategorien
jQuery

jQuery animate ruckelt im Chrome

Folgender Code ruckelt im Chrome:

        $('#foo')
            .animate({
            'marginLeft' : '100px'
        }, 900) ;

die Lösung war ziemlich einfach:

        $('#foo').css({WebkitTransform: 'translateX(0px)'})
            .animate({
            'marginLeft' : '100px'
        }, 900) ;

Bei Problemen: jQuery updaten auf die neueste Version (1.8.2.)

Kategorien
jQuery

Javascript Page Cookie setzen

Um mit Javascript einen Cookie zu setzen, der nur auf der aktuellen Seite gültig ist bspw. foo.de/mySite3.php muss man den passenden Pfad setzen, den man mit Javascript folgender maßen auslesen kann. Ich benutze zum Setzen von Cookies die Lib jQuery Cookies. Der Pfad muss im Format „/mySite3.php“ gesetzt werden, dazu wird der vordere Teil der URL bis nach der Domain abgeschnitten.

    function setCurrentPageCookie(expiresHours) {
        var domain = document.domain;
        var path = document.URL;
        console.log(domain);
        console.log(path);
        var relativePath = path.substring(path.indexOf(domain) + domain.length);
        console.log(relativePath);
        $.cookies.set('cookieName', '1', {
            path: relativePath,
            hoursToLive : expiresHours
        });
    }