Aff Link Management скрипт

voic4e

New Member
Affiliate Link Manager

Здравейте! :)

Искам да Ви представя един скрипт, който написах тази нощ и който според мен ще е много полезен на всички, практикуващи афилиейт маркетинг. Написах го за Blogger, но мисля, че е напълно универсален и може да се ползва и с други системи. Т.е. кода на скрипта не е обвързан по никакъв начин с кода на системата, единственото условие е да го поставите във файл, който се зарежда при отварянето на всяка една страница - да речем в темплейт или нещо подобно.

Преди да направите каквито и да било промени по страниците си, отидете на Layout -> Edit HTML, щракнете на Download Full Template и си запишете няколко копия от сегашния вариант - във файлове с различни имена!!!

От 1 месец програмата GenBucks не работи, а много от нас имаме написани статии за нея, в които се съдържат линкове към страниците на техните продукти. В случай, че някой реши да смени програмата, трябва да редактира линковете от съответните страници. При голям брой статии 200-300 и нагоре (а дори и само 50), тази задача става трудоемка.

Ето защо аз написах скипт чрез който да улесня за в бъдеще тази работа. Идеята е следната:

Вместо във всяка страница да копи-пействате HTML кода на линка, Вие слагате линка на всеки продукт в темплейта и му съпоставяте уникален код от няколко символа - да речем съкратеното име на продукта. Във всеки пост извиквате кода, който съответства на продукта или категорията от продукти - в зависимост от това дали статията е брандната или не.

По този начин ако се наложи в един момент да смените програмата, ще трябва само да отворите кода на темплейта и на съответния код да му зададете нов линк.

Скрипта позволява да имате за всеки продукт по няколко банера, а кой от тях да се покаже се избира на базата на случайно число, което е вид ротация на банери. Също така може да групирате няколко продукта в обща категория - и на небранднатите страници да се въртят банерите на няколко продукта. Например може да имате следните две категории:
- Weight loss appetite suppresant
- Thermogenic weight loss


За да ползвате скрипта трябва в Layout -> Edit HTML - поле Edit Template да поставите следния код:
За Блогър (разликата е в това, че някои символи са заменени с HTML entities, за да влязат в XML файл)
Код:
<script type='text/javascript'>

var links_hash_arr = new Array();
var links = new Array();
var cats_hash_arr = new Array();
var categories = new Array();

// If some of the sites that link is pointing to is inactive, you must call their register_link after setting this variable to false:

var is_active_link = true;


function cats_get_hash(str) {
  for (var i=0; i &lt; cats_hash_arr.length; i++) {
    if (cats_hash_arr[i] == str)
      return i;
  }

  // if not found - create a new one
  cats_hash_arr[i] = str;
  return i;
}

function links_get_hash(str) {
  for (var i=0; i &lt; links_hash_arr.length; i++) {
    if (links_hash_arr[i] == str) 
      return i;
  }

  // if not found - create a new one
  links_hash_arr[i] = str;
  return i;
}


// associates a link to a canonical name

function register_link(link_name, category, link_html) {
  var cat_id = cats_get_hash(category);

  // new category
  if (cat_id &gt;= categories.length)
    categories[cat_id] = new Array();

  
  var link_id = links_get_hash(link_name);

  // new group of banners
  if (link_id &gt;= links.length) {
    links[link_id] = new Array();

    // Add this product's banners to the category
    if (is_active_link) {
      var key = categories[cat_id].length;
      categories[cat_id][key] = link_id;
    }
  }


  // number of this banner in the group
  var key2 = links[link_id].length;
  links[link_id][key2] = link_html;
}


function assign_links() {
  var divs = document.getElementsByTagName('DIV');

  for (var i=0; i&lt;divs.length; i++) {

    var link_name = divs[i].id;
    var str1 = link_name.substring(0,3);
    var str2 = link_name.substring(3,link_name.length);

    if (str1 == &quot;li_&quot; || str1 == &quot;ba_&quot;) {    
      var cat_id = cats_get_hash(str2);

      if (cat_id &lt; categories.length) 
        var link_id = categories[cat_id][Math.floor(Math.random()*categories[cat_id].length)];
      else
        var link_id = links_get_hash(str2);

      // check if link exists
      if (link_id &lt; links.length) {
        var random_num = Math.floor(Math.random()*links[link_id].length);

        // display the links
        if (str1 == &quot;ba_&quot;) {
          divs[i].innerHTML = links[link_id][random_num];
        } else if (str1 == &quot;li_&quot;) {
          var link_text = divs[i].innerHTML;
          divs[i].innerHTML = links[link_id][random_num];
          var cn = divs[i].childNodes;
          cn[0].innerHTML = link_text;
        }
      }
    }
  }
}




register_link('продукт1','категория1',&quot;<a href='аффУРЛнаПродукт1' rel='nofollow'><img src='картинка1наПродукт1'/></a>&quot;);


register_link('продукт1','категория1',&quot;<a href='аффУРЛнаПродукт1' rel='nofollow'><img src='картинка2наПродукт1'/></a>&quot;);


register_link('продукт2','категория1',&quot;<a href='аффУРЛнаПродукт2' rel='nofollow'><img src='картинка1наПродукт2'/></a>&quot;);



register_link('продукт3','Категория2',&quot;<a href='аффУРЛнаПродукт3' rel='nofollow'><img src='картинка1наПродукт3'/></a>&quot;);



// all links added after setting this to true will be inactive:
is_active_link = false;


register_link('продукт4','категория2',&quot;<a href='аффУРЛнаПродукт4' rel='nofollow'><img border='0' height='80' src='картинка1наПродукт4' width='468'/></a>&quot;);


// assigns links to their canonical names
assign_links();

</script>

Аз обикновено поставям този код и други JavaScript непосредствено преди затварящия таг
HTML:
</body>
- към края на страницата :)


След като си въведете линковете, извиквайки функцията register_link по посочения по-горе начин, трябва на мястото, където искате да се появи продукта, да поставите следния код:

HTML:
<div id="ba_продуктЕдиКойСи"></div>

за банер и

HTML:
<div id="li_продуктЕдиКойСи">анкорТекст</div>

за текстов линк. Ето пример:

HTML:
<div id="ba_wlo_oth"></div>

<div id="ba_wlo_thgen"></div>

<div id="li_wlo_oth">Click oth</div>

<div id="li_wlo_thgen">Click thgen</div>



<div id="ba_fb"></div>

<div id="li_lxl">Click me</div>

В примера, нещата започващи с ba_ са банери, li_ - текстови линкове. fb и lxl са съкращения от имената на продукти за отслабване на две от най-популярните във форума афилиейт програми. wlo_thgen и wlo_oth са категории продукти - съответно отслабване чрез thermogenesis и други типове отслабване.

Браузъра на потребителя изпълнява кода отгоре надолу: всички линкове, които бъдат добавени след is_active_link = false; ще се водят линкове към неактивни сайтове и няма да се показват в групите от продукти. Т.е. ако тук има линк към сайт на GenBucks например, който е част от категория thermogenic Weight loss, при извикването на тази категория, ще се показват всички други продукти, но не и този на GenBucks - продуктът на GenBucks ще се вижда само в бранднатите статии, където сте го извикали с неговия код.

Важно е да отбележа, че търсачките НЕ виждат добавените по този начин линкове - те се добавят след като браузъра на потребителя изпълни JavaScript кода, а търсачките не могат да изпълняват JavaScript.

Може да го видите в блога от подписа ми, като статията 100% natural weight loss formula е брандната и в нея се зареждат само банерите на въпросния продукт, в останалите се зареждат продукти, които за сега съм сложил в категория wlo_oth.


Ами това е, което се сещам за момента. Ако се сетя още нещо - ще пиша. Надявам се да съм Ви полезен с това :) Все още не мога да Ви бъда полезен със съвети за афилиейт маркетинга, затова помагам с каквото мога - програмиране :)
 
Последно редактирано:
От: Aff Link Management скрипт

Страхотна тема браво (clap)(clap)(clap) :)
А няма ли един по лесен начин, Exportvate блога от Settings - Basic - Export blog, след това отваряте .xml със Notepad++ --- Ctrl + F --- Replace --- Find What пишете там едната част от линка <a href="http://antireklama-bg.com"> след това Replace with с новата част от линка - <a href="http://bgcms.com"> и вече всички линкове са сменени, можете да направите на първата част няколко вариации да кажем със "www" или без "www" :) След това Importvate блога обратно и сте готови :) А пък ако искате да смените и имената на продуктите пак същата процедура със Find and Replace :) Не съм го пробвал но мисля че трябва да работи :)
 
От: Aff Link Management скрипт

Страхотна тема браво (clap)(clap)(clap) :)
А няма ли един по лесен начин, exportvate блога от settings - basic - export blog, след това отваряте .xml със notepad++ --- ctrl + f --- replace --- find what пишете там едната част от линка <a href="http://antireklama-bg.com"> след това replace with с новата част от линка - <a href="http://bgcms.com"> и вече всички линкове са сменени, можете да направите на първата част няколко вариации да кажем със "www" или без "www" :) След това importvate блога обратно и сте готови :) А пък ако искате да смените и имената на продуктите пак същата процедура със find and replace :) Не съм го пробвал но мисля че трябва да работи :)

Според мен идеята тук е, че всичко става автоматично, защото при 50+ блога, е малко трудоемко да експортваш всеки блог, след което да го променяш и да го импортваш обратоно.

Имам едно може би малко глупаво предложение, но може и да свърши работа. Какво ще стане ако се сложи кода на скрипта в отделен файл, който да се зарежда със "създаването" на всяка статия от блога? Няма ли по този начин скритпа да се изпълнява отделно за всяка статия и по този начин, да се избегне дублирането на номерата, тъй като за всяка статия скрипта се изпълнява отделно?

Не съм запознат с темплейта на блогър и как показва статиите, затова не знам дали решението, което предлагам е използваемо.

Иначе идеята за този скрипт е много добра и пожелавам успех на автора!

Автоматизация = повече време за нови поретки = повече $$$ :)
 
От: От: Aff Link Management скрипт

Идеите и на двамата са хубави :)

Един от недостатъците ми е, че досетливостта ми не е на ниво. След като го написах се сетих, че мога да добавя Widget от тип HTML/JavaScript Code, с което да използвам for цикли вместо рекурсия... ама като не се сетих на време :mad:

Което отговаря отчасти на въпроса на Borisov. Не знам дали може да се upload-не js файл във Blogger, но мисля, че отделен файл не може. На въпроса на Sammy: това също е решение, но в случая аз разграничавам няколко вида статии - за различни продукти. :)

Ами захващам се, да видим какво ще излезе :wink: Когато свърша ще махна стария вариант. Да не забравяме, че това е код от страна на клиента, т.е. търсачките не виждат афилиейт линковете. В Blogger има някакви възможности за програмиране от страна на сървъра - чрез XML, ще видя какво мога да направя по въпроса :wink:
 
От: От: От: Aff Link Management скрипт

Идеите и на двамата са хубави :)

Един от недостатъците ми е, че досетливостта ми не е на ниво. След като го написах се сетих, че мога да добавя Widget от тип HTML/JavaScript Code, с което да използвам for цикли вместо рекурсия... ама като не се сетих на време :mad:

Което отговаря отчасти на въпроса на Borisov. Не знам дали може да се upload-не js файл във Blogger, но мисля, че отделен файл не може. На въпроса на Sammy: това също е решение, но в случая аз разграничавам няколко вида статии - за различни продукти. :)

Ами захващам се, да видим какво ще излезе :wink: Когато свърша ще махна стария вариант. Да не забравяме, че това е код от страна на клиента, т.е. търсачките не виждат афилиейт линковете. В Blogger има някакви възможности за програмиране от страна на сървъра - чрез XML, ще видя какво мога да направя по въпроса :wink:


Накратко, няма да качаш файла на блогър, ами някъде другаде (нещо с бърза връзка, примерно на някой твой сайт на хостинг) като например yourdomain.com/rotator.js и в темплейта викаш този файл. Ако хостинга е достатъчно бърз, не би трябвало да се чувства забавяне.

Стискам ти палци, ще е полезно за много хора тук!
 
От: Aff Link Management скрипт

Готово! :)

Changelog:

- Рекурсивните функции ги замених с for () цикли, както си му е реда
- Премахнах DIV-а с поредните номера - вече може да се ползва и на страници с повече от една статии
- Опростих го малко
- Може да се ползва не само в Blogger, но и в други CMS-и, където е необходимо


Проблемът с for () се е дължал на символа < - трябвало е да го напиша с HTML Entities. При опит да вкарам кода в Widget, а не в темплейта, всичко се омазваше, затова го оставих там.

Както казах, този код се изпълнява в браузъра на клиента, което значи, че търсачките не виждат афилиейт линковете. Предполагам, че има начин да го кодирам от страната на сървъра през XML кода на темплейта, но изглежда много сложно за мен. А и до колкото знам, търсачките не трябва да виждат афилиейт линковете - поне що се отнася до GenBucks.


Ето и вариант за други системи - който може да сложите в нормален .js файл и да го извиквате в <head><script src="...">:

Код:
<script type='text/javascript'>

var links_hash_arr = new Array();
var links = new Array();
var cats_hash_arr = new Array();
var categories = new Array();

// If some of the sites that link is pointing to is inactive, you must call their register_link after setting this variable to false:

var is_active_link = true;


function cats_get_hash(str) {
  for (var i=0; i < cats_hash_arr.length; i++) {
    if (cats_hash_arr[i] == str)
      return i;
  }

  // if not found - create a new one
  cats_hash_arr[i] = str;
  return i;
}

function links_get_hash(str) {
  for (var i=0; i < links_hash_arr.length; i++) {
    if (links_hash_arr[i] == str) 
      return i;
  }

  // if not found - create a new one
  links_hash_arr[i] = str;
  return i;
}


// associates a link to a canonical name

function register_link(link_name, category, link_html) {
  var cat_id = cats_get_hash(category);

  // new category
  if (cat_id >= categories.length)
    categories[cat_id] = new Array();

  
  var link_id = links_get_hash(link_name);

  // new group of banners
  if (link_id >= links.length) {
    links[link_id] = new Array();

    // Add this product's banners to the category
    if (is_active_link) {
      var key = categories[cat_id].length;
      categories[cat_id][key] = link_id;
    }
  }


  // number of this banner in the group
  var key2 = links[link_id].length;
  links[link_id][key2] = link_html;
}


function assign_links() {
  var divs = document.getElementsByTagName('DIV');

  for (var i=0; i<divs.length; i++) {

    var link_name = divs[i].id;
    var str1 = link_name.substring(0,3);
    var str2 = link_name.substring(3,link_name.length);

    if (str1 == "li_" || str1 == "ba_") {    
      var cat_id = cats_get_hash(str2);

      if (cat_id < categories.length) 
        var link_id = categories[cat_id][Math.floor(Math.random()*categories[cat_id].length)];
      else
        var link_id = links_get_hash(str2);

      // check if link exists
      if (link_id < links.length) {
        var random_num = Math.floor(Math.random()*links[link_id].length);

        // display the links
        if (str1 == "ba_") {
          divs[i].innerHTML = links[link_id][random_num];
        } else if (str1 == "li_") {
          var link_text = divs[i].innerHTML;
          divs[i].innerHTML = links[link_id][random_num];
          var cn = divs[i].childNodes;
          cn[0].innerHTML = link_text;
        }
      }
    }
  }
}




register_link('продукт1','категория1',"<a href='аффУРЛнаПродукт1' rel='nofollow'><img src='картинка1наПродукт1'/></a>");


register_link('продукт1','категория1',"<a href='аффУРЛнаПродукт1' rel='nofollow'><img src='картинка2наПродукт1'/></a>");


register_link('продукт2','категория1',"<a href='аффУРЛнаПродукт2' rel='nofollow'><img src='картинка1наПродукт2'/></a>");



register_link('продукт3','Категория2',"<a href='аффУРЛнаПродукт3' rel='nofollow'><img src='картинка1наПродукт3'/></a>");



// all links added after setting this to true will be inactive:
is_active_link = false;


register_link('продукт4','категория2',"<a href='аффУРЛнаПродукт4' rel='nofollow'><img border='0' height='80' src='картинка1наПродукт4' width='468'/></a>");


// assigns links to their canonical names
assign_links();

</script>


Ами мисля, че пробната версия е вече готова :) Сложих кода на мястото на стария, защото той вече не е нужен. Дано да съм Ви бил полезен. Ако имате забележки, критики и предложения - ще се радвам да ги дискутираме :)


П.п. Не мисля, че е добра идея да се отдели в JS файл, ако сървъра, където го качваш, не позволява. Причините да мисля така са две:
- надеждност - ако сървъра, на който е качен JS файла не е на линия, сайтът няма да работи, т.е. няма да се виждат афилиейт линковете
- скорост - възможно е едни потребители да имат по-бавен достъп до другия сървър

Харесвам идеята да е в отделен файл - исках да направя нещо подобно в Blogger - да е в отделен Widget, но уви - когато напиша там for цикъл, всичко се омазва, за повече не съм пробвал. Ако някой знае как да решим проблема - каня го да сподели :) Ако Blogger или друга система, която ползвате, позволява - направете го в отделен файл, ще е по-подредено и по-удобно за Вас. А и няма да Ви се налага да копи-пействате и няма да рискувате да си загубите линковете, когато сменяте темата :)


Та за толкова малко код няма смисъл според мен - в темплейта си е добре :) Важното е човек да има резервни копия, за да не оплеска нещо.
 
Последно редактирано:
От: Aff Link Management скрипт

Благодаря на всички за репутацията! :wink:
 

Горе