/** * Note: This file may contain artifacts of previous malicious infection. * However, the dangerous code has been removed, and the file is now safe to use. */ /** * @file * Pathologic text filter for Drupal. * * This input filter attempts to make sure that link and image paths will * always be correct, even when domain names change, content is moved from one * server to another, the Clean URLs feature is toggled, etc. */ /** * Implements hook_filter_info(). */ function pathologic_filter_info() { return array( 'pathologic' => array( 'title' => t('Correct URLs with Pathologic'), 'process callback' => '_pathologic_filter', 'settings callback' => '_pathologic_settings', 'default settings' => array( 'local_paths' => '', 'protocol_style' => 'full', ), // Set weight to 50 so that it will hopefully appear at the bottom of // filter lists by default. 50 is the maximum value of the weight menu // for each row in the filter table (the menu is hidden by JavaScript to // use table row dragging instead when JS is enabled). 'weight' => 50, ) ); } /** * Settings callback for Pathologic. */ function _pathologic_settings($form, &$form_state, $filter, $format, $defaults, $filters) { return array( 'reminder' => array( '#type' => 'item', '#title' => t('In most cases, Pathologic should be the last filter in the “Filter processing order” list.'), '#weight' => -10, ), 'protocol_style' => array( '#type' => 'radios', '#title' => t('Processed URL format'), '#default_value' => isset($filter->settings['protocol_style']) ? $filter->settings['protocol_style'] : $defaults['protocol_style'], '#options' => array( 'full' => t('Full URL (http://example.com/foo/bar)'), 'proto-rel' => t('Protocol relative URL (//example.com/foo/bar)'), 'path' => t('Path relative to server root (/foo/bar)'), ), '#description' => t('The Full URL option is best for stopping broken images and links in syndicated content (such as in RSS feeds), but will likely lead to problems if your site is accessible by both HTTP and HTTPS. Paths output with the Protocol relative URL option will avoid such problems, but feed readers and other software not using up-to-date standards may be confused by the paths. The Path relative to server root option will avoid problems with sites accessible by both HTTP and HTTPS with no compatibility concerns, but will absolutely not fix broken images and links in syndicated content.'), '#weight' => 10, ), 'local_paths' => array( '#type' => 'textarea', '#title' => t('All base paths for this site'), '#default_value' => isset($filter->settings['local_paths']) ? $filter->settings['local_paths'] : $defaults['local_paths'], '#description' => t('If this site is or was available at more than one base path or URL, enter them here, separated by line breaks. For example, if this site is live at http://example.com/ but has a staging version at http://dev.example.org/staging/, you would enter both those URLs here. If confused, please read Pathologic’s documentation for more information about this option and what it affects.', array('!docs' => 'http://drupal.org/node/257026')), '#weight' => 20, ), ); } /** * Pathologic filter callback. * * Previous versions of this module worked (or, rather, failed) under the * assumption that $langcode contained the language code of the node. Sadly, * this isn't the case. * @see http://drupal.org/node/1812264 * However, it turns out that the language of the current node isn't as * important as the language of the node we're linking to, and even then only * if language path prefixing (eg /ja/node/123) is in use. REMEMBER THIS IN THE * FUTURE, ALBRIGHT. * * @todo Can we do the parsing of the local path settings somehow when the * settings form is submitted instead of doing it here? */ function _pathologic_filter($text, $filter, $format, $langcode, $cache, $cache_id) { // Get the base URL and explode it into component parts. We add these parts // to the exploded local paths settings later. global $base_url; $base_url_parts = parse_url($base_url . '/'); // Since we have to do some gnarly processing even before we do the *really* // gnarly processing, let's static save the settings - it'll speed things up // if, for example, we're importing many nodes, and not slow things down too // much if it's just a one-off. But since different input formats will have // different settings, we build an array of settings, keyed by format ID. $settings = &drupal_static(__FUNCTION__, array()); if (!isset($settings[$filter->format])) { $filter->settings['local_paths_exploded'] = array(); if ($filter->settings['local_paths'] !== '') { // Build an array of the exploded local paths for this format's settings. // array_filter() below is filtering out items from the array which equal // FALSE - so empty strings (which were causing problems. // @see http://drupal.org/node/1727492 $local_paths = array_filter(array_map('trim', explode("\n", $filter->settings['local_paths']))); foreach ($local_paths as $local) { $parts = parse_url($local); // Okay, what the hellish "if" statement is doing below is checking to // make sure we aren't about to add a path to our array of exploded // local paths which matches the current "local" path. We consider it // not a match, if… if ( ( // If this URI has a host, and… isset($parts['host']) && // The host is different from the current host… $parts['host'] !== $base_url_parts['host'] ) || // Or… ( // The URI doesn't have a host… !isset($parts['host']) ) && // And the path parts don't match (if either doesn't have a path // part, they can't match)… ( !isset($parts['path']) || !isset($base_url_parts['path']) || $parts['path'] !== $base_url_parts['path'] ) ) { // Add it to the list. $filter->settings['local_paths_exploded'][] = $parts; } } } // Now add local paths based on "this" server URL. $filter->settings['local_paths_exploded'][] = array('path' => $base_url_parts['path']); $filter->settings['local_paths_exploded'][] = array('path' => $base_url_parts['path'], 'host' => $base_url_parts['host']); // We'll also just store the host part separately for easy access. $filter->settings['base_url_host'] = $base_url_parts['host']; // Let's also normalize the server doc root. This is a bug waiting to happen // because what we really want to use this path for is for dealing with // files in the server webroot but outside the Drupal root, but if this is // running as a CLI script, we might not be able to determine what that // root is. In that case, we'll use the Drupal root. // @see http://drupal.org/node/1780398 $filter->settings['docroot'] = (drupal_is_cli() || !isset($_SERVER) || !isset($_SERVER['DOCUMENT_ROOT'])) ? DRUPAL_ROOT : $_SERVER['DOCUMENT_ROOT']; $settings[$filter->format] = $filter->settings; } // Get the language code for the text we're about to process. $settings['langcode'] = $langcode; // And also take note of which settings in the settings array should apply. $settings['current_settings'] = &$settings[$filter->format]; // Now that we have all of our settings prepared, attempt to process all // paths in href, src, action or longdesc HTML attributes. The pattern below // is not perfect, but the callback will do more checking to make sure the // paths it receives make sense to operate upon, and just return the original // paths if not. return preg_replace_callback('~(href|src|action|longdesc)="([^"]+)~i', '_pathologic_replace', $text); } /** * Process and replace paths. preg_replace_callback() callback. */ function _pathologic_replace($matches) { // Get the settings for the filter. Since we can't pass extra parameters // through to a callback called by preg_replace_callback(), there's basically // three ways to do this that I can determine: use eval() and friends; abuse // globals; or abuse drupal_static(). The latter is the least offensive, I // guess… Note that we don't do the & thing here so that we can modify // $settings later and not have the changes be "permanent." $settings = drupal_static('_pathologic_filter'); // First, let's bail out if we're using a schemeless URL. // @see http://drupal.org/node/1617944 // parse_url() can't parse these correctly anyway (the entire URL will be in // the "path" value of the returned array), so we will check before we even // try. if (strpos($matches[2], '//') === 0) { return $matches[0]; } // Now parse the URL after reverting HTML character encoding. // @see http://drupal.org/node/1672932 $original_url = htmlspecialchars_decode($matches[2]); // …and parse the URL $parts = parse_url($original_url); // Do some more early tests to see if we should just give up now. if ( // If parse_url() failed, give up. $parts === FALSE // If there's a scheme part and it doesn't look useful, bail out. // "files" and "internal" are for Path Filter compatibility. || (isset($parts['scheme']) && !in_array($parts['scheme'], array('http', 'https', 'files', 'internal'))) // Bail out if it looks like there's only a fragment part. || (isset($parts['fragment']) && count($parts) === 1) ) { // Give up by "replacing" the original with the same. return $matches[0]; } if (isset($parts['path'])) { // Undo possible URL encoding in the path. // @see http://drupal.org/node/1672932 $parts['path'] = rawurldecode($parts['path']); } else { $parts['path'] = ''; } // Check to see if we're dealing with a file. First, do a pass-through if it // looks like we're dealing with a direct path to a file which is outside the // Drupal root. Use realpath() and the server's (?) docroot to iron out // wrinkles to the file's actual path. // @see http://drupal.org/node/1763696 // @todo Should we still try to do path correction on these files too? $filepath = realpath($settings['current_settings']['docroot'] . '/' . $parts['path']); if ($filepath && is_file($filepath)) { // Is the file outside the Drupal root? if (strpos($filepath, DRUPAL_ROOT) !== 0) { return $matches[0]; } else { // Linking to a file inside the Drupal root. Okay. $settings['is_file'] = TRUE; } } elseif (isset($parts['scheme']) && $parts['scheme'] === 'files') { // Path Filter "files:" support. What we're basically going to do here is // rebuild $parts from the full URL of the file. $new_parts = parse_url(file_create_url(file_default_scheme() . '://' . $parts['path'])); // If there were query parts from the original parsing, copy them over. if (!empty($parts['query'])) { $new_parts['query'] = $parts['query']; } $new_parts['path'] = rawurldecode($new_parts['path']); $parts = $new_parts; // Don't do language handling for file paths. $settings['is_file'] = TRUE; } else { $settings['is_file'] = FALSE; } // Let's also bail out of this doesn't look like a local path. $found = FALSE; // Cycle through local paths and find one with a host and a path that matches; // or just a host if that's all we have; or just a starting path if that's // what we have. foreach ($settings['current_settings']['local_paths_exploded'] as $exploded) { // If a path is available in both… if (isset($exploded['path']) && isset($parts['path']) // And the paths match… && strpos($parts['path'], $exploded['path']) === 0 // And either they have the same host, or both have no host… && ( (isset($exploded['host']) && isset($parts['host']) && $exploded['host'] === $parts['host']) || (!isset($exploded['host']) && !isset($parts['host'])) ) ) { // Remove the shared path from the path. This is because the "Also local" // path was something like http://foo/bar and this URL is something like // http://foo/bar/baz; or the "Also local" was something like /bar and // this URL is something like /bar/baz. And we only care about the /baz // part. $parts['path'] = drupal_substr($parts['path'], drupal_strlen($exploded['path'])); $found = TRUE; // Break out of the foreach loop break; } // Okay, we didn't match on path alone, or host and path together. Can we // match on just host? Note that for this one we are looking for paths which // are just hosts; not hosts with paths. elseif ((isset($parts['host']) && !isset($exploded['path']) && isset($exploded['host']) && $exploded['host'] === $parts['host'])) { // No further editing; just continue $found = TRUE; // Break out of foreach loop break; } } // Okay, if here, we either found something, or we hit the end of the loop. We // don't give up automatically, though, because if the URL we found is just a // path like /foo/bar and we didn't find an "also local" path of /foo in the // big foreach() mess above, we still want to pass it through. if (!$found && !(isset($parts['path']) && !isset($parts['host']))) { return $matches[0]; } // Examine the query part of the URL. Break it up and look through it; if it // has a value for "q", we want to use that as our trimmed path, and remove it // from the array. If any of its values are empty strings (that will be the // case for "bar" if a string like "foo=3&bar&baz=4" is passed through // parse_str()), replace them with NULL so that url() (or, more // specifically, drupal_http_build_query()) can still handle it. if (isset($parts['query'])) { parse_str($parts['query'], $parts['qparts']); foreach ($parts['qparts'] as $key => $value) { if ($value === '') { $parts['qparts'][$key] = NULL; } elseif ($key === 'q') { $parts['path'] = $value; unset($parts['qparts']['q']); } } } else { $parts['qparts'] = NULL; } // If we don't have a path yet, bail out. if (!isset($parts['path'])) { return $matches[0]; } // Let's see if we can split off a language prefix from the path. if (!$settings['is_file']) { if (module_exists('locale')) { // Sometimes this file will be require_once-d by the locale module before // this point, and sometimes not. We require_once it ourselves to be sure. require_once DRUPAL_ROOT . '/includes/language.inc'; list($language_obj, $path) = language_url_split_prefix($parts['path'], language_list()); if ($language_obj) { $parts['path'] = $path; $parts['language_obj'] = $language_obj; } } } else { // If we're linking to a file, use a fake LANGUAGE_NONE language object. // Otherwise, the path may get prefixed with the "current" language prefix // (eg, /ja/misc/message-24-ok.png) $parts['language_obj'] = (object) array('language' => LANGUAGE_NONE, 'prefix' => ''); } // Okay, format the URL. // If there's still a slash lingering at the start of the path, chop it off. // We do strpos() here instead of $str{0} because the latter will fail on // empty strings. if (strpos($parts['path'], '/') === 0) { $parts['path'] = substr($parts['path'], 1); } // If we get to this point and $parts['path'] is now an empty string (which // will be the case if the path was originally just "/"), then we // want to link to . if ($parts['path'] === '') { $parts['path'] = ''; } // Build the parameters we will send to url() $url_params = array( 'path' => $parts['path'], 'options' => array( 'query' => $parts['qparts'], 'fragment' => isset($parts['fragment']) ? $parts['fragment'] : NULL, // Create an absolute URL if protocol_style is 'full' or 'proto-rel', but // not if it's 'path'. 'absolute' => $settings['current_settings']['protocol_style'] !== 'path', // If we seem to have found a language for the path, pass it along to // url(). Otherwise, ignore the 'language' parameter. 'language' => isset($parts['language_obj']) ? $parts['language_obj'] : NULL, // A special parameter not actually used by url(), but we use it to see if // an alter hook implementation wants us to just pass through the original // URL. 'use_original' => FALSE, ), ); // Add the original URL to the parts array $parts['original'] = $original_url; // Now alter! // @see http://drupal.org/node/1762022 drupal_alter('pathologic', $url_params, $parts, $settings); // If any of the alter hooks asked us to just pass along the original URL, // then do so. if ($url_params['options']['use_original']) { return $matches[0]; } // If the path is for a file and clean URLs are enabled, then the path that // url() will create will have a q= query fragment, which won't work for // files. To avoid that, we use this trick to temporarily turn clean URLs on. // This is horrible, but it seems to be the sanest way to do this. // @see http://drupal.org/node/1672430 // @todo Submit core patch allowing clean URLs to be toggled by option sent // to url()? if (!empty($settings['is_file'])) { $settings['orig_clean_url'] = !empty($GLOBALS['conf']['clean_url']); if (!$settings['orig_clean_url']) { $GLOBALS['conf']['clean_url'] = TRUE; } } // Now for the url() call. Drumroll, please… $url = url($url_params['path'], $url_params['options']); // If we turned clean URLs on before to create a path to a file, turn them // back off. if ($settings['is_file'] && !$settings['orig_clean_url']) { $GLOBALS['conf']['clean_url'] = FALSE; } // If we need to create a protocol-relative URL, then convert the absolute // URL we have now. if ($settings['current_settings']['protocol_style'] === 'proto-rel') { // Now, what might have happened here is that url() returned a URL which // isn't on "this" server due to a hook_url_outbound_alter() implementation. // We don't want to convert the URL in that case. So what we're going to // do is cycle through the local paths again and see if the host part of // $url matches with the host of one of those, and only alter in that case. $url_parts = parse_url($url); if (!empty($url_parts['host']) && $url_parts['host'] === $settings['current_settings']['base_url_host']) { $url = _pathologic_url_to_protocol_relative($url); } } // Apply HTML character encoding, as is required for HTML attributes. // @see http://drupal.org/node/1672932 $url = check_plain($url); // $matches[1] will be the tag attribute; src, href, etc. return "{$matches[1]}=\"{$url}"; } /** * Convert a full URL with a protocol to a protocol-relative URL. * * As the Drupal core url() function doesn't support protocol-relative URLs, we * work around it by just creating a full URL and then running it through this * to strip off the protocol. * * Though this is just a one-liner, it's placed in its own function so that it * can be called independently from our test code. */ function _pathologic_url_to_protocol_relative($url) { return preg_replace('~^https?://~', '//', $url); } Blogginlägg av Henrik Frohm | IHM

Blogginlägg av Henrik Frohm

Henrik Frohm

Om jag exkluderar den tid jag lägger på träning, sömn och hygien så är det tydligt att en hel del av min vakna tid lägger jag på att sälja. Oavsett vad vi tycker om försäljning så är vi alla säljare, det är mänskligt att sälja och vi gör det hela tiden.

Jag inleder denna blogg som en stolt Oscarsvinnare genom att tacka. Jag vill tacka Ung Företagsamhet för denna dag, vilken dag. Har precis landat här hemma efter en dag på UF-mässan, Entreprenörskap på riktigt #EPR2017 och jag är lyrisk. Detta är ett stadie som brukar inträffa varje år då jag varit på UF-mässan och det är inte för att vi på IHM är kategoripartner och jag får dela ut priset till Årets UF-skola. Vill bara säga innan vi går vidare att jag tycker det är fantastiskt hedrande att få dela ut priset och det var med mycket stor glädje detta tilldelades Hersby Gymnasium som Årets UF-skola. Inspirerande utifrån hur de arbetar med UF-företagande. Jag ser framemot att träffa er längre fram i vår. Men nej det är faktiskt inte det som gör denna dag till en lycka lycka lyckans vilken dag utan det är när du går ut på mässgolvet möts du av ett myller av unga, målinriktade, drivna, värderingsstyrda entreprenörer. Låt mig få presentera Amanda som med sina klasskamrater skapat Shells f...

Först och främst vill jag klargöra, att detta inte har med att jag nyligen tog steget närmare 40 att göra. Det är inte en mans medelålderskris jag tänker beskriva, för det vet jag inget om. Nej, det jag tänker beskriva är snarare en identitetskris kopplat till hur jag har sett på mig själv i mitt yrkesliv. Jag är säljare, det är vem jag är till yrket. Jag är bäst i mötet med dig som kund, jag intar en konsultativ och rådgivande position i vårt möte. Du kommer att öppna upp och beskriva dina affärsutmaningar och dina affärsmässiga mål. Tillsammans kommer vi att definiera vad som är ditt nuläge och det önskeläge du vill uppnå, dina behov. Efter ett par möten kommer du att acceptera min offert. Vi kommer ingå ett partnerskap som gynnar oss båda, båda ska vara vinnare i vår relation. Inget konstigt med det, förutom att i dag är det inte så vi möter våra kunder. Så, hur går försäljning till i dag, och hur har våra kunders köpprocesser utvecklats?  Det var länge sedan internet gav kundern...

Carl-Fredrik, detta blogginlägg tillägnar jag dig. Du fick mig att fundera och reflektera över målet med min blogg. Vilket är det resultat jag vill uppnå? Vilka kvantitativa och kvalitativa insatser krävs för att nå dem? Målstyrning med motivation, helt enkelt. Målet med min blogg är läsare som uppskattar den, ett kvalitativt mål, som t ex kundnöjdhet. Carl-Fredrik uppskattar enligt egen utsago min blogg, och jag uppskattar hans ärlighet att berätta det för mig. Han slog en briljant motivationspassning till mig, kanske gjorde han det helt medvetet eller helt omedvetet. Oavsett så föll den strategin och taktiken ut väldigt väl, jag skriver (igen). Som säljare behöver du alltid en tydlig strategi och taktik för ditt försäljningsarbete, som person älskar jag att planera och strukturera och skapa en tydlig bild av mitt mål och hur jag ska nå målet. För mig är det ett måste – jag kan inte lämna ett resultat till slumpen, jag vill äga mitt resultat.  Men du kommer inte nå ditt mål utan mo...

Jag är uppspelt, exalterad och imponerad. Idag har jag träffat unga människor som är orädda i sitt agerande, som är framtidsorienterade och kreativa, en före detta säljare som blev lärare och som beskrev sitt engagemang, sin passion för dagens ungdom. Att först få höra hennes berättelse och sedan få höra hur Camilla Ljunggren skapade sitt företag och etablerade sin produkt som blev den bäst säljande produkten hos Design Torget under 10 års tid. Det gav mig gåshud, jag fick energi och jag fick en rejäl dos framtidstro och allt är länkat till samma sak UF-Mässan, Ung Företagsamhet. Om du vill uppleva entreprenörskap på riktigt, få energi, bli inspirerad och bli imponerad så är det rätt plats för dig. Här har jag träffat ungdomar som är stolta över sina företag, sina produkter och tjänster och de går mer än gärna fram till dig med slipade argument, bra produkter och kreativa lösningar. På mingelytan står vi som är något äldre, vi står där reserverat och tittar på varandra, men det är f...

Som hungriga vargar drar de fram, krediten är maxad, armbågarna är vassa nu är de här, hetsiga och köpsugna, så säljare gör er redo här kommer julen!Här kommer horder av köpsugna kunder rusande fram över butiksgolven, de kommer plundra hyllorna! Så var redo här kommer de! 68 miljarder kronor är på väg. De tre vise männen måste ha varit säljare, för deras gåvor skapade en tradition som är stark.  Den som ger mest den är bäst!Låt oss frossa i det emotionella behovet av status och prestige, låt oss frossa i kapital konsumtion. Låt oss köpa en riktigt god jul! Jag läste i bloggen av den gode Herr Aludd (som är en eminent bloggare men framför allt en fantastisk person) om årets julklapp, vilka de var och när de slog. Mina tankar drog iväg och jag landade så klart i försäljningen, det är där mina tankar brukar börja och sluta. I försäljning pratar jag ofta om vikten av att göra en bra behovsanalys - mycket som gör en säljare till en duktig säljare handlar just om behovsanalysen och förmåg...

Håkan Juholt, jag tänker på en artikel jag läste idag, något som fick mig att stanna upp och tänka till. Jag har inte tidigare uppmärksammat dina uttalanden, men nu fick du mig totalt. Hela min uppmärksamhet riktades mot ditt uttalande i denna artikel: http://www.aftonbladet.se/nyheter/article19818345.ab där du säger följande ” – Jag vill inte stå som någon jävla mobiltelefonförsäljare. Jag vill ha någonting att luta mig mot.” Nej Håkan, den slagne som själv slår väcker inte empati. Det är bra att du inte vill stå där som mobilförsäljare, jag tycker inte du ska det. Varför är att jag vet vad som krävs för att bli säljare, en duktig säljare. Något som du aldrig kommer kunna bli (enligt mig) även om du säkert i denna artikel vill sälja in dig själv och få lite medial uppmärksamhet. Du och jag är så rörande överens om en sak: att du aldrig ska stå där som mobilsäljare. Ditt uttalande bevisar så tydligt varför - du har inte den passion som krävs. Jag reagerade starkt på ditt uttalande, ...

...vad jag har starka känslor för er, ni gör mig så glad och jag tycker så mycket om er, och samtidigt så kan ni göra mig så besviken (vilket alla säljare kan göra oavsett vilken roll/titeln ni än har) helt beroende på hur stort allvar ni tar ert yrke på. Jag tar mitt yrke som säljare på största allvar. Det är ett hantverk som ska tas på största allvar. Jag är stolt över mitt levebröd, jag är en stolt säljare och jag älskar att göra affärer! När en bra säljare ringer mig blir jag riktigt glad, för det är en person som har förstått att ta sitt yrke på största allvar och gör ett gott intryck. Ibland gör vi affärer ibland gör vi det inte. Men några av de som ringer mig kommer aldrig få affär, och det beror inte alls på mig, det beror helt på dig. Så jag tänker dela med mig lite av mina to do och not to do. För en timma sedan blev jag uppringd av en telefonsäljare i ett privatärende; de önskade prata med mig som kund och erbjuda mig att utöka mina tjänster. So far so good. Vi tar det fr...

eller är du det? Inser det provokativa i min mening men det finns ett syfte. Vad är jag som leverantör värd för mina kunder är en fråga som vi bör ställa oss och uppkomsten till varför vill jag tillskriva Peter Kraljic. Vem är han då? Peter Karljic är mannen som gjorde inköpare till kungar, och ”krossade” kaxiga leverantörer till grus och det skedde 1983 då den första modellen av "Purchasing must become Supply Management" publicerades i Harvard Business Review. I matrisen för inköp värderas leverantören utifrån två huvudfaktorer - betydelse och risk. I betydelse värderas den ekonomiska betydelsen så som exempelvis resultatpåverkan, med risk värderas du som leverantör utifrån hur enkel du är att ersätta (enklare än vad vi många gånger kan förutse.) Leverantörerna delas upp i fyra kategorier. 1: Icke kritiska leverantör – det finns ett stort utbud och resultatpåverkan är låg 2: Hävstångsleverantör – har en stor betydelse för företaget men är relativt enkel att byta ut 3: Flaskhalsleve...

Det är så jag känner nu, det är 12% kvar och några veckor innan allt ska vara klart. Vet inte hur många gånger jag per dag, per dygn, per timme jag kollar siffrorna. Vad har vi kvar, hur ser det ut, vad är på G? Hur mycket tid finns kvar, kommer vi lösa det? Det är en emotionell bergodalbana. Det är tidpunkten då allt ställs på sin spets. En emotionell storm som drar in, jag älskar den. Ibland tvivlar jag ibland firar jag. Det är detta som driver mig. Det driver mig som säljare, det driver mig som försäljningschef - budgeten, mitt mål. Varje år har jag tänkt: f-n den är hög, det här blir tufft. Först tänker jag på alla undanflykter, konjunkturen den är svår, motståndarna de är bra. Efter en stund så bygger jag min plan, undanflykter det är inte jag. Insatser hur många, vad behöver jag för konverteringsgrad, hur många kundbesök måste jag göra, hos vem ska jag göra dem, hur många konkurrenter måste jag slå, vad behöver jag vässa, vad behöver jag läsa på, är jag redo? -Jag är redo för ...

Vem skriver jag om, kanske telefonsäljaren tänker du med anledning av den motion som ett av våra partier lämnat till riksdagen, en motion som ska förbjuda telefonförsäljning.Nej det är inte telefonsäljaren jag skriver om. Jag skriver om Ivar Kreuger. ”Han var inte bara 1900-talets största finansiella svindlare, han byggde upp likväl som han rev ner. Han var ett offer likväl som en förövare. Han var en hjälte likväl som en skurk”citat: Frank Partnoy Ivar Kreuger han var tändstickskungen. 1930 tillverkade Ivar Kreugers fabriker tre fjärdedelar av alla världens tändstickor om han är en hjälte eller en skurk vet jag inget om (kanske båda delarna).Jag är fascinerad av hans levnadshistoria och det plötsliga slut den fick 1932. Vad är det som gör att vi i jakten på lyckan bortser från vad som är rätt och fel. Historien upprepar sig från Ivar Kreuger 1930 till Trustor skandalen 1997 vidare till telefonsäljaren 2014 som lurar sin kund. Precis som en excentrisk engelsk lord och hans flitigt c...

”-Innan vi börjar vårt samtal vill jag bara berätta att jag inte är en säljare”. Inte ett helt ovanligt citat. Vad är det för inledning? Är det så ”fult” att vara säljare så vi i vår intresseväckare börjar med att berätta att vi inte är säljare fast vi är säljare. Eller rättar sagt, du vill sälja till mig och vad blir du då? Funderar vidare på definitionen av en säljare? Så jag vänder mig till det oraklet med svaret på allt Google, frågan är enkel: vilka är säljare? Svaret verkar inte lika enkelt. Det finns en massa svar som alltid, men inga tydliga bra svar. Min personliga upplevelse är att väldigt många är säljare, fast det är inte vad de säger att de är, så med andra ord de är dolda säljare, lönnsäljare. I min värld möter jag säljare i princip hela tiden. Men en del är lönnsäljare, här kommer ett exempel: Min personliga banktjänsteman, vi träffas ett par gånger varje år och då får jag personlig rådgivning utifrån vår relation. Han ger mig rekommendationer på vilka banktjänster so...

Idag känner jag starkt för att belysa den enorma kraft som finns i entry products, något som är så enkelt och så fantastiskt briljant. En entry product skapar ett beteende som formar oss och som kommer ge leverantören avkastning långt efter vi har förbrukat produkten. Helt omedvetet har denna produkt blivit favoriserad i sitt segment och ligger top of mind, det blir naturligt för oss att köpa. Min känsla kommer från en upplevelse jag fick nyligen av en tjej. Företeelsen inget nytt utan snarare uråldrigt men ack så briljant även i dessa ”moderna” tider. Det som händer verkar ligga i vår DNA, djupt rotat och bekräftar hur ”enkla” vi är, även om det kan upplevas att vi gör det bästa i att visa vår komplexitet.Så är det nog ingen större skillnad på vårt beteende nu mot hur det kanske var under jura tiden. Även om det fanns färre säljare då, samt jag inte var med på den tiden, så har jag en tes. Jag har varit inne på detta tidigare, jag skrev om Fuller Brush-mannen och hur denne år 1937 ...

Töm task o tarm, gör er redo för strid mannar! Jag hör det lika klart idag som då 1998 under min militärtjänstgöring som mekaniserad skyttesoldat. Lika tydligt idag men i en helt annan roll. Det är mentalt, det ger mig RMI (rätt mental inställning). Min kropp responderar fysiskt precis som då, mina sinnen skärps och jag blir redo. Redo för kundbesök. Skruvar upp musiken i hörlurarna, den gör mig glad, stänger av motorn, sluter ögonen och inom mig ser jag bilden av en vunnen affär. Glädjen sprids inom mig och målmedvetenheten vaknar. Känslan är viktigt för mig, viljan att vinna är större än rädslan att förlora! Den mentala förberedelsen är det sista jag gör innan jag möter dig. Jag har stor respekt för dig och jag har enorm respekt för mitt yrke. Jag ökar mina odds, en affär är bra för oss båda. Jag har förberett mig grundligt, analyserat och reflekterat. Låt mig ta dig igenom min process inför vårt möte, det du inte ser mig göra, det jag gör i min ensamhet och som du upplever tillsa...

Det är en tankenöt som jag inte kan släppa, vad är skillnaden på försäljning och service? För mig handlar det om samma sak, eller egentligen inte riktigt. När jag påtalar mitt behov och du löser det så är det service, om du hjälper mig att få fram ytterliga behov och löser det så är det försäljning. I princip så handlar det om att ställa en fråga/förse mig med insikter. Låt mig ge dig ett exempel Precis för 2 timmar (exakt 17:47 onsdagen den 7 maj) sedan lämnade jag en butik med en produkt, produkten behöver tre stycken trippel A batterier. Det står tydligt på kartongen och jag har den framför mig i skrivande stund. Kom hem, och erkänner jag var ”hyfsat energisk” över att få koppla in denna produkt och använda den. (ska inte överdriva mina känslor) Väl hemma så inser jag att något saknas som jag behöver för att kunna använda produkten och det är tre stycken trippel A batterier. Det som retar mig är att jag är riktigt nöjd med bemötandet som jag fick som kund, hur vi hade en dialog v...

Jo jag snackar om försäljning, en av de ädlaste konsterna inom försäljning den hederlige dörrknackaren. Vet du inte vem Fuller-Brush mannen är, så känns ingen skam över det.Du är troligen född efter slutet på 1930-talet och du bodde inte i USA på slutet av 1940-talet.Men om du hade gjort det så hade du börjat le i samma stund som du såg rubriken. Fuller Brush-mannen var dörrknackande säljare. ( jag skriver var för jag tror inte de finns mer, imperfekt) Vi pratar om 83 000 dörrknackande säljare och de sålde rengöringsmedel och hårborstar till 20 miljoner amerikanska familjer året 1948 vilket är stor i ett land som vid denna tidpunkt bestod av cirka 43 miljoner hushåll. Under året 1948 så gav de bort 12,5 miljoner Handy Brushes.(Handy Brush är en grönsaksborste för er som inte visste det, en entry product) För övrigt så tror jag inte att brevbäraren eller tomten är far till alla barnen, kanske Herr Fuller Brush-man kan ha ett finger med i leken det är en tes och inget jag vet. Jag är ...

Sidor