Tipp: Online-Hilfe mit Walk.me

 Dokumentation, Web  Kommentare deaktiviert für Tipp: Online-Hilfe mit Walk.me
Mrz 222016
 

Neulich bin ich auf ein interessantes online-basiertes Tool namens Walk.me (http://www.walkme.com/) gestoßen. Mit diesem kann man bevorzugt für internetbasierte Seiten, aber auch in einem Intranet eine Online-Hilfe aka „Walk-through“ erstellen, bei dem die Anwender durch eine Schrittfolge geführt werden.

Wer sich für die technischen Details interessiert, hier zwei Links zu Whitepapers:
Walk me Architecture
Walk Me Salesforce Solution Architecture

Für klassisches SAP R/3 ist dieses System leider nicht geeignet, es könnte allerdings mit Netweaver-Ausgaben und SAP Fiori kombiniert werden.

Share

Twitter Empfehlung: iam_freelancer

 Business, Web  Kommentare deaktiviert für Twitter Empfehlung: iam_freelancer
Jan 132012
 

Seit dieser Woche in meiner Leseliste: @iam_freelancer mit vielen Links zu Infos für (nicht nur, aber besonders) nebenberufliche Freelancer.

Da man auch als gestandener Vollzeit-Selbstständiger immer mal auf der Suche nach neuen Ideen und Inspirationen für das zukünftige Business ist – und sich gegenebenfalls auch alle paar Jahre mal umorientieren muss – kann ich diesen Tweet allen empfehlen, die sich mit Freelancing beschäftigen :)

Share
 

Es gibt sicherlich sehr viele bessere Lösungen, aber manchmal sitzt man mit einem IE und einem Office-Paket da und braucht gaaanz schnell die Farbe eines Textes… und da habe ich heute dazugelernt, wie das auch gehen kann.

  1. Den zu analysierenden Text der Webseite nach Word kopieren (sowohl in Version 2003 als auch 2010 getestet).
  2. Auf ein Wort darin klicken, z.B. den blauen Link.
  3. Neben dem Button „Schriftfarbe“ auf den Pfeil klicken und die Option „Weitere Farben“ wählen. Farbwerte von Webtexten auslesen mit Word 1
  4. Im Farben-Fenster auf die Registerkarte „Benutzerdefiniert“ klicken. Dort finden sich dann die RGB-Farben des Textes.
    Farbwerte für Webtexte mit Word auslesen
  5. Dies kann man dann in eine webtaugliche Farbe übersetzen, beispielsweise auf http://html-color-codes.info/.

Wie gesagt – keine schöne Methode, aber sie funktioniert schnell und mit typischen Großfirmenbordmitteln :)

Share
 

(JQuery ist bei Drupal 6 bereits im Core und muss für die folgenden Arbeiten angeschaltet sein.)

Die Darstellung von Comments in Drupal kann von Haus aus „flat“ oder „collapsed“ sein. Die Einstellung hierfür (und die Möglichkeit, dies für die User freizugeben), wird je Content Type getroffen. Besonders für ein Forum sind beide Optionen beliebt.

Bei „collapsed“ wird dabei ursprünglich nur der Link zum Comment eingefügt – der Comment-Text selbst ist nicht verfügbar. Dies ist in der Core-Datei „comment-folded.tpl.php“ festgelegt. Bei einem Umbau zu JQuery muss dafür Sorge getragen werden, dass die Comments verfügbar sind.

Am einfachsten wird dafür die Datei „comment.tpl.php“ (für flat comments) in die Datei „comment-folded.tpl.php“ umkopiert und als Grundlage für die JQuery-Darstellung genutzt. Das Ziel ist, die einzelnen Comments über slideToggle zwischen collapsed und nicht-collapsed zu schalten.

Änderungen in comment-folded.tpl.php

Am Ende des PHP-Bereichs muss ein eindeutiger Key geliefert werden, damit jeder der Comments einzeln angesprochen werden kann (sonst werden alle auf einmal aufgeklappt). Dieser Key ist idealerweise der $title-Link:
$key = md5($title)

Dann wird der Link entsprechend erweitert, nämlich um einen onclick-Event mit dem jeweiligen Key und einem slideToggle.
<h3 onclick="$('#<?=$key?>').slideToggle()"><?php print $title ?></h3>

Zuletzt wird die div-Class ebenfalls mit dem eindeutigen Key versehen und der Display zunächst auf „none“ gesetzt. print $content wird zu print $comment->comment korrigiert.
<div class="content" id="<?=$key?>" style="display:none">
<?php print $comment->comment ?>

Die Comments werden jetzt als Links ausgegeben, bei deren Klick der Comment angezeigt wird. Die Formatierungen sind allerdings noch nicht korrekt. Dies resultiert aus dem Core-Module „comment.module“, das nicht dafür vorgesehen war, im Fall von collapsed Comments diese auch anzuzeigen. Es wird daher nicht das entsprechenden Markup angewendet.

Änderungen in comment.module

Um dies zu beheben, wird die Zeile 1584
if ($visible) { verschoben, und zwar nach unterhalb der check_markup-Anweisung:
$comment->comment = check_markup($comment->comment, $comment->format, FALSE);
if ($visible) {

Über diese Änderung (jaja, ein Core-Hack :) werden alle Comments nun korrekt formatiert angezeigt.

Tipp: Der ausführliche Inhalt des Comment-Objects $comment kann über die folgende Zeile erhalten werden.
<div style="display:none; border:1px solid black;background-color:#d0d0d0"><pre><? print_r($comment); ?></pre></div>

Share

Search und Reset Buttons für exposed filter Views

 Web  Kommentare deaktiviert für Search und Reset Buttons für exposed filter Views
Feb 082010
 

Bei Views in Drupal gibt es zwei beliebte Fragestellungen, die vom Module selbst nicht gelöst werden:

a) Der Apply-Button sollte besser ein Search-Button sein.

b) Es sollte einen Reset-Button geben, der die Suche zurücksetzt.

Meine ursprüngliche Lösung für den Search-Button war eine Implementation über die template.php.

function theme_preprocess_views_exposed_form(&$vars, $hook) {
// Change the text on the submit button
$vars['form']['submit']['#value'] = t('Search');
// Rebuild the rendered version (submit button, rest remains unchanged)
unset($vars['form']['submit']['#printed']);
$vars['button'] = drupal_render($vars['form']['submit']);
}

Die Frage des Reset-Buttons kam später auf, und ich beschloss, lieber ein eigenes Custom-Module dafür zu nutzen.  Dabei war natürlich erstmal nichts sichtbar – logisch, wenn Module und template.php versuchen, das gleiche zu überschreiben. Also löschte ich den Search-Button aus der template.php und implementierte beide Buttons über ein Custom Module views_formalter.

Das folgende wäre der Code, um für alle Views einen Reset-Button zu liefern:

<?php
/**
* Implementation of hook_form_alter().
*/
function views_formalter_form_alter(&$form, $form_state, $form_id) {
if ($form_id == 'views_exposed_form') {
$reset_button_value = t('Reset');
$current_display = $form_state['view']->current_display;
$form['submit']['#value'] = t('Search');
$form['reset'] = array(
'#type' => 'markup',
'#value' => '<input class="form-button" type="reset"
value="'. $reset_button_value . ' " onClick="javascript:window.location=\''.$GLOBALS['base_url'] .'?q='. $form_state['view']->display[$current_display]->
display_options['path'] .'\';" />',
);
}
}
?>

Bei onclick wird der Pfad des Views aufgerufen. Sah zunächst prima aus – dann fiel mir auf, dass das Suchfeld in organic groups ebenfalls ein exposed filter view ist, nämlich og_search. Also eine zusätzliche Abfrage eingebaut:

$exposed_views = array('og_search');
if (!in_array($form_state['view']->name, $exposed_views)) {
$reset_button_value = t('Reset');
...
}

Ursprünglich war diese Abfrage so formuliert, dass explizit diejenigen Views angegeben werden mussten, für die ein Reset-Button gezeigt werden sollte. Da in meinem Projekt die meisten Views den Button zeigen sollten, habe ich die Abfrage umgedreht.

Share

Theming von hidden CCK fields

 Web  Kommentare deaktiviert für Theming von hidden CCK fields
Feb 072010
 

Der Hintergrund der Entwicklung war der Wunsch, Seiten auf „outdated“ setzen zu können und auf dieser Basis dann einen Hinweis in der Seitenausgabe zu haben. Das ließ sich als ein CCK-Feld namens „field_outdated“ schnell einbauen, doch wie themen? Der Freund des Analysten ist an dieser Stelle ein strategisch in page.tpl.php platziertes:

<?php print_r($GLOBALS); ?>

Damit ist relativ schnell zu sehen, dass field_outdated ein Objekt der Node ist. Die Abfrage läuft dann auf folgendes hinaus:
Wenn outdated gesetzt ist UND die Eigenschaft ‚view‘ empty ist (nämlich bei hidden), dann soll die von mir definierte Variable field_outdated_formatted gesetzt werden, und zwar mit HTML meiner Wahl. In diesem Fall möchte ich „Outdated“ erscheinen lassen.

Code für die template.php
function THEME_preprocess_page(&$variables) {
if (!empty($variables['node']->field_outdated) && (empty($variables['node']->field_outdated[0]['value']))) {
$variables['field_outdated_formatted'] = '<span class="outdated">OUTDATED</span>';
}
}

Code in page.tpl.php, beispielsweise hinter den Node Title einzugeben:
<?php print $field_outdated_formatted; ?>

Es gelten die üblichen Format-Caveats im Blog hier (demnächst ist wirklich ein neues Theme dran.)

Share
 

Eine typische Anforderung bei einer Liste von z.B. ungelesenen Artikeln ist die Möglichkeit, diese per Checkbox und Knopfdruck auf gelesen zu setzen.

In Drupal kann für solche Massenaktionen über Views das Views Bulk Operations Module (VBO) genutzt werden. Der Haken hierbei war leider, dass es für „set to read“ keine Action gab. Diese musste daher selbst programmiert werden. Das geschah ausgehend vom Node-Module im Core und mit einem Blick auf Advanced Forum, in dem es eine analoge Funktion für ganze Foren gibt.

„Set to read“ bedeutet effektiv, dass der Timestamp-Eintrag in der Tabelle „history“ für diese nid und uid geändert wird. Dies würde mit einem Replace gehen, aber da beide andere Codestellen mit Delete/Insert arbeiten, habe ich es analog implementiert.

Der gesamte Integrationspfad ins Drupal-Projekt ist:

  1. Ein set-to-read Module anlegen und in der Modules-Liste unter admin/build/modules aktivieren.
  2. Unter admin/settings/actions/manage prüfen, ob das Module aktiv und die Node-Action „Set to read“ verfügbar ist.
  3. Ein Seite mit einem „Bulk Operations“ View bauen, und als Action „Set to read“ auswählen. Bei sofortigem Abarbeiten sieht der User wenig Effekt, bei der Batch API erscheint der blaue Fortschritsbalken (meiner Meinung nach weniger schön). Auf eine Sicherheitsabfrage und eine Rückmeldung habe ich in meinem Projekt verzichtet, da es sich um keinen kritischen Schritt wie z.B. Löschen handelt.
  4. Dann den View speichern und im Projekt prüfen.

Code für set_to_read.module-Datei (Achtung, beim Insert gibt es zwei unschöne Zeilenumbrüche):

<?php
/**
* Implementation of hook_action_info().
*/
function set_to_read_action_info() {
return array('set_to_read_noderead_action' => array(
'description' => t('Set to read'),
'type' => 'node',
'configurable' => FALSE,
'hooks' => array(
'nodeapi' => array('presave'),
'comment' => array('insert', 'update'), )
)
);
}
/**
* Implementation of the actual function set_to_read_noderead_action()
*/
function set_to_read_noderead_action(&$node) {
global $user;
if ($user->uid) {
$sql = 'delete from {history} ' .
"where nid='" . $node->nid . "' ".
"and uid='" . $user->uid . "'";
db_query($sql);
$sql = 'insert into {history} (nid,uid,timestamp) ' .
"values ('" . $node->nid . "', '" . $user->uid . "', unix_timestamp()) ";
db_query($sql);
}
}
?>

Share

Mehr Drupal

 Web  Kommentare deaktiviert für Mehr Drupal
Jan 092010
 

Da sich inzwischen doch einiges an Know-how und auch ein wenig Code angesammelt hat, wird es hier in Zukunft mehr Drupal-Beiträge geben. Dabei ist mir mal wieder aufgefallen, dass mein Blogdesign extrem untauglich für Code-Publikation ist, da ständig die Zeilen schlecht umgebrochen werden. Da wird wohl in absehbarer Zeit mal ein Redesign fällig.

Drupal ist jedenfalls am Boomen. Nebeneffekt davon ist, dass hier die erste Projektanfrage gelandet ist (von einer Firma in Stuttgart, die wohl immer noch gerne Unterstützung hätte und zumindest gestern noch mit dem Stichwort „Drupal“ bei Monster.de auftauchte). Trotz aller Versuche vor und nach Weihnachten konnte ich die „2-3 Tage vor Ort, Templates, Programmierung“ nicht an andere Drupalisten weiterreichen, was vermutlich auch an der Mischung lag – die wenigsten fühlen sich in Design und Programmierung zuhause. Wenn die Firma in Hamburg gewesen wäre, wäre ich vielleicht mal einen Tag auf Verdacht vorbeigefahren, aber Stuttgart ist etwas weit für so eine Aktion. Schöne Arbeitswelt, die Arbeit nicht vergeben bekommt :)

Für das Drupalcamp in Essen im Februar bin ich inzwischen auch angemeldet, und freue mich sehr, alte und neue Gesichter zu treffen. Am Freitag abend wird es wohl ein Aufwärmtreffen geben, und bisher plane ich dabeizusein. Vielleicht biete ich auch einen Showcase an… aber das muss ich erst noch absprechen.

Share

Bericht zum Drupalmediacamp.ch

 Software, Web  Kommentare deaktiviert für Bericht zum Drupalmediacamp.ch
Mai 112009
 

Am Freitag und Samstag war ich beim Drupalmediacamp in Aarau und muss rückblickend sagen, dass es eine extrem gute Entscheidung war, dorthin zu fahren. Zum einen konnte ich eine Menge Kontakte vom Kölner Drupalcamp vertiefen und zum anderen viele neue Informationen einholen.

Die letzten Monate an Beschäftigung mit VMs, XAMPP, Drupal und der Dokumentation eines C++-basierten SDK haben sich außerdem dahingehend bezahlt gemacht, dass ich jetzt auch recht entwicklungsnahe Sessions nicht nur verstanden habe, sondern auch hoffe, diese für unser Projekt umsetzen zu können.

Die Sessions (die Links führen zu weiteren Infos und ggf. vorhandenen Materialien&Filmen):

Alleine drei meiner Favoriten wurden von Jonathan Minder aka jon gehalten, der sehr techniknah arbeitet und viel Background-Informationen auch zur Frage des Stagings mit svn/Testserver/Lifeserver lieferte. Alle Vorträge sind in seinem Blog zu finden.

Kantonschule Enge: Wie die grösste Kantonschule Zürichs Drupal erfolgreich einsetzt: Hier sprach jon ausführlich über die Vorteile von Drupal vs. Typo3, was mich nochmals in unserer Wahl bestärkt hat. Außerdem wurde dieses Projekt in einem kurzen Zeitrahmen mit recht wenig Programmieraufwand erstellt.

Apache Solr: Hier beschrieb jon die Geschichte, Funktionen und Vorteile von Aache Solr und die Verbindung mit Drupal. Da wir für unser Intranet ja nicht die Acquia-Suche buchen können, ist das lokale Installieren von Solr die richtige Wahl für unsere Suche, und die Facets-Funktion ist spitze!

Workshop: Wie richte ich eine perfekte Drupal – Entwicklungsumgebung mit PHP Debugger ein: Hier stellte jon die Einbindung der freien IDE Aptana mit Drupal vor; ist ggf. für uns aktuell der Overkill, aber es beruhigt zu wissen, wie es gehen würde.

Continue reading »

Share

IPs und Ports

 Web  Kommentare deaktiviert für IPs und Ports
Mai 052009
 

Praktisch, um die nach außen sichtbare IP zu zeigen: What is my IP?.

Gerade stand ich allerdings vor dem Problem, wie ich von meinem Browser auf den Webserver einer lokal vorhandene Ubuntu-VM zugreifen kann. Hier hilft der Befehl ifconfig in der Konsole weiter. Bei der Ausgabe „eth2“ findet sich die inet Adresse, unter der die VM erreicht werden kann.

Der Port, auf dem der Webserver der VM erreichbar ist, wird dagegen in der Datei /opt/lampp/etc/httpd.confd eingestellt, z.B. Listen 80 (default für Webseiten). Zum Bearbeiten der Datei bietet sich der Texteditor „nano“ an, der seine möglichen Befehle praktischerweise unten anzeigt. Da httpd.confd normalerweise eine geschützte Datei ist, lautet der Aufruf sudo nano httpd.conf

Zum Abschluß der Port-Änderung den Apache neu starten:
sudo /opt/lampp/lampp restart

Share
© 2012 Doku-Hotline Suffusion theme by Sayontan Sinha