Добавьте меня в сервисы закладок
В полной версии Quick.Cms есть такая функция, но как там это реализовано мне не понравилось.
Мне хотелось, чтоб данные кнопки выводились, где мне надо, а не везде подряд, да и реализация кода мне не понравилась, слишком тяжеловесна.
И так приступим.
Выводить на этот раз мы будем следующий код:
<div id="bookmarks">$lang[Add_link_to]:<br><br>
<script src=" core /bookmarks.js" type="text/javascript"></script></div>
В административной части выглядеть это будет так:

Велосипед придумывать мы не будем и назовем нашу переменную $lang[Linkto_page] и поместим её в языковом файле lang/ru.php после надписи // plugins
$lang[Linkto_page] = " Закладки ";
$lang[Add_link_to] = " Добавить в закладки ";
В папку templates/img/ поместим картинки кнопок отображающих сервисы закладок.
В папке core создадим файл bookmarks.js
core /bookmarks.js
function bm() {
var title=encodeURIComponent(document.title);var url=encodeURIComponent(location.href);
// dir image
var dir='templates/img/';
var services=[
['bobrdobr.ru/addext.html?url='+url+'&title='+title,'bobr.gif','BobrDobr'],
['memori.ru/link/?sm=1&u_data[url]='+url+'&u_data[name]='+title,'memori.gif','Memori'],
['www.mister-wong.ru/index.php?action=addurl&bm_url='+url+'&bm_description='+title,'wong.gif','Mister Wong'],
['moemesto.ru/post.php?url='+url+'&title='+title,'mm.gif','MoeMesto'],
['100zakladok.ru/save/?bmurl='+url+'&bmtitle='+title,'100z.gif','100'],
['ruspace.ru/index.php?link=bookmark&action=bookmarkNew&bm=1&url='+url+'&title='+title,'ruspace.gif','RuSpace'],
['webmarks.ru/mark/?p=1&url='+url+'&ename='+title,'wm.gif','WebMarks'],
['myscoop.ru/add/?title='+title+'&URL='+url,'myscoop.gif','myscoop'],
['zakladok.net/link/?u='+url+'&t='+title,'sm_button.gif','zakladok.net'],
['links.i.ua/mark/?p=1&url='+url+'&ename='+title,'iua.gif','Закладки I.UA'],
['zakladki.yandex.ru/userarea/links/addfromfav.asp?bAddLink_x=1&lurl='+url+'&lname='+title,'yandex.gif','Yandex'],
['www.google.com/bookmarks/mark?op=add&bkmk='+url+'&title='+title,'google.gif','Google'],
['digg.com/submit?phase=2&url='+url+'&title='+title,'digg.gif','digg.com' ],
['del.icio.us/post?v=4&noui&jump=close&url='+url+'&title='+title,'del.gif','del.icio.us']];
var btn='<div>';
for (i=0;i<services.length;i++) {
btn+='<a href="http://'+services[i][0]+'" target=_blank><img src="'+dir+services[i][1]+'" alt="'+services[i][2]+'" style="border:0;padding:0;margin:0 4px 0 0;"></a>';}
btn+='</div>';
document.write(btn);}
bm();
В файл templates/ admin/ pages.tpl (таблица <table class="tab" id="tabOptions"> ), вставим функцию $sLinkToPage с названием $lang[Linkto_page] перед <!-- tab options -->
<tr>
<td>$lang[Linkto_page]</td>
<td>$sLinkToPage</td>
</tr>
Соответственно в файле actions_admin/p.php создадим переменную $sLinkToPage которая используя функцию throwYesNoBox будет выводить наш чекбокс, отображать и передавать его состояние (0 если не активен или 1) в другую переменную iLinktoPage для сохранения.
actions_adminp.php
после
$aData['iPosition'] = 0;
Разместим
$aData['iLinktoPage'] = 0;
$sLinkToPage = throwYesNoBox( 'iLinktoPage', $aData['iLinktoPage'] );
И поместим как всегда перед строкой
$sPhotoTypesSelect = throwSelectFromArray( $aPhotoTypes, 1 );
Чекбокс наш уже отображается но данные из него никуда не передаются, что делать?
В файле db/ru_pages_ext.def.php описан массив переменных которые будут хранится в файле db/ru_pages_ext.php , вот туда мы и добавим наши данные о состоянии чекбокса – переменную iLinktoPage
dbru_pages_ext.def.php
$aFieldsNames = Array( 'iPage' => 0, 'sDescriptionFull' => 1, 'sMetaDescription' => 2, 'sMetaKeywords' => 3, 'sTemplate' => 4, 'sTheme' => 5, 'sUrl' => 6, 'sBanner' => 7, 'iLinktoPage' => 8, );
function ru_pages_ext( $aExp ){
return Array( 'iPage' => $aExp[0], 'sDescriptionFull' => $aExp[1], 'sMetaDescription' => $aExp[2], 'sMetaKeywords' => $aExp[3], 'sTemplate' => $aExp[4], 'sTheme' => $aExp[5], 'sUrl' => $aExp[6], 'sBanner' => $aExp[7], 'iLinktoPage' => $aExp[8] );
}
Теперь делаем вывод нашего кода в зависимости от записанного состояния чекбокса.
Для этого в файле actions_client/p.php сделаем проверку данных записанных в переменную iLinktoPage и если оно равно 1 то выводим переменную $sLinktoPage которая будет отображать наш код из файла темплейта templates/pages_default.tpl
actions_clientp.php
if( !empty( $aData['iLinktoPage'] ) && $aData['iLinktoPage'] == 1 ){
$sLinktoPage = $oTpl->tbHtml( $aData['sTemplate'], 'LINKTO_PAGE' );
}
И наконец в файл templates/pages_default.tpl После <!-- END BANNER -->
Поместим наш код
<!-- BEGIN LINKTO_PAGE -->
<div id="bookmarks">$lang[Add_link_to]:<br><br>
<script src="core/bookmarks.js" type="text/javascript"></script></div>
<!-- END LINKTO_PAGE -->
Остаётся только проверить работоспособность.
Должен вас предупредить, если вы всё проделываете с чистой системой в которой нет данных, то проблем не возникнет, а иначе в файл db/ru_pages_ext.php будет записываться мусор.
Так что делать если данные уже занесены?
На самом деле всё просто, надо будет добавить в файл db/ru_pages_ext.php в конце каждой строки знак $ и всё заработает нормально.
Фаил и картинки кнопок качать здесь.