Facebook Twitter Gplus E-mail RSS
formats

Webdevsbg.com – форум за всякакъв вид програмиране

Публикувана на 04.05.2013, от в Клюки.

Здравейте, тези дни научих за нов форум, който се развива в сферата на програмирането, а както изглежда по блога ми, аз обичам да се занимавам с това, за това и реших да го споделя с посетителите си на блога.

Във форума може да откриете всичко за вашите уеб разработки – от готови (CMS) до авторски системи и скритове. Намерете подходящ шаблон (темплейт) за вашия уеб сайт или потърсете помощ. Също така, могат да бъдат открити уроци за HTML, Javascript, CSS, PHP и др. Включително и мои уроци. Всичко свързано с уеб на едно място е там!
Но да не приключваме с това. Може би от вас читатели има и почитатели на десктоп програмирането, затова не оставайте разочаровани. В Webdevsbg можете да намерите и категории, които да задоволят и вашите предпочитания.

Затова не чакайте, а посетете портала още сега на www.webdevsbg.com!

formats

Прост Калкулатор Изговарящ Резултата

Публикувана на 17.11.2012, от в Уроци.

Здравейте! Ще ви покажа как направите прост калкакулатор с помоща на Visual Basic.Трябваше да правя проект и реферат за даскало и използвах една от програмите които бях правил преди да започнем да учим Visual Basic в даскало и създадох кратко рефератче за изработката ѝ, по изискванията от госпожата!

Използвани контролери:

  • 2 броя TextBox – За въвеждане на 2-те стойности за изчисление
  • 4 броя RadioButton – Избор на съответната функция за изчисление
  • 1 брой Label – За извеждане на резултата от изчислението
  • 1 брой Button – Задава команда за изчисление и извеждане на резултата в Label

Допълнителна информация:

  • За създаването на програмата е използвана Microsoft Visual Studio 2010
  • При натискане на бутона “Calculate” програмата изговаря резултата, използвайки библиотеката SAPI.SPVoice! 

Стъки за създаването на програмата:

  1. От менюто “File” на Microsoft Visual Studio 2010 избираме “New Project” и избираме “Windows Forms Application
  2.  В появилата се форма добавяме следните контролери използвайки ToolBox-a в лявата част на екрана:
    • 2 TextBox
    • 4 RadioButtons
    • 1 Label
    • 1 Button
    • Забележка: Можете да ги подредите както желаете! Аз лично съм избрал всичко да е едно под друго, в съотвествие с написания код и предаване на естетически вид.
  3.     Даваме двоен клик на бутона за изчисление(Button1), за да ни се отвори Code Window и въвеждаме следното:
    Public Class Form1
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 'При клик на Button1
            Dim p1 = CreateObject("SAPI.spvoice") 'Добавяме библиотеката за изговор
            Dim p2 = "" 'Създаваме си променлива, която по-късно ще приеме резултата от изчисленията
            If RadioButton1.Checked Then 'Проверяваме дали първия бутон за избор е чекнат
                p2 = Val(TextBox1.Text) + Val(TextBox2.Text) 'Ако е събираме стойностите от 2та TextBox и ги запазваме в променливата p2
            ElseIf RadioButton2.Checked Then 'Проверяваме дали втория бутон за избор е чекнат
                p2 = Val(TextBox1.Text) - Val(TextBox2.Text) 'Ако е изваждаме стойностите от 2та TextBox и ги запазваме в променливата p2
            ElseIf RadioButton3.Checked Then 'Проверяваме дали третия бутон за избор е чекнат
                p2 = Val(TextBox1.Text) * Val(TextBox2.Text) 'Ако е умножаваме стойностите от 2та TextBox и ги запазваме в променливата p2
            ElseIf RadioButton4.Checked Then 'Проверяваме дали четвъртия бутон за избор е чекнат
                p2 = Val(TextBox1.Text) / Val(TextBox2.Text) 'Ако е делим стойностите от 2та TextBox и ги запазваме в променливата p2
            End If
            Label1.Text = "the result is " + p2.ToString 'Извеждаме в Label1 стойноста на p2
            p1.Speak("the result is " + p2.ToString) 'Изговаряме резултата
        End Sub
    
    End Class

Програмата е завършена!

Програма

Вече имаме напълно завършен просто калкулатор изговарящ резултата от изчислението!

 

За да изпробваме програмата отиваме в менюто “Debug” и избираме “Start Debugging”. Програмата ще се отвори и остава да въведем 2-те стойности които ще изчисляваме, метода на изчисление и натиснем бутона за изпълнение. В програмата, под бутона ще се появи резултата, и ще се въпроизведе глас изговяращ резултата.

Надявам се урока да ви хареса, въпреки че е елементарен :)

Файловете от проекта във Visual Studio 2010

Урока в Web-Tourist.Net

При проблеми или въпроси ми пишете на ЛС или в форума :) !

Урока е авторски и забранявам копирането му в други сайтове без разрешението ми или това на администраторите!!!

formats

bbcode editor и parser v2

Публикувана на 30.09.2012, от в Уроци.

Мисля, че е време да ви представя и втората версия на bbcode editor и parser! Тук всичко е написано на jQuery(което прави и библиотеката задължителна). Има и нови функции за offtopic, клипове от vbox7.com и youtube.com, оцветяване на кода(благодарение на prettify). Също така използвам и Алтернативи на alert,confirm и prompt v2 вместо стандартните prompt,confirm и alert функции. Има и други новости, но тях ги оставам на вас да ги разучите :)

За да не трупаме урока с излишни редове си изтеглете prettify и Алтернативи на alert,confirm и prompt v2 .  А тук ще ви представя само файловете за самия скрипт за bbcode editor и parser!

BBbutons.js

$.fn.bbcodetoolbar = function(data) { //създаваме функцията за показване на bbcode editor-a
    var i = $('.toolbar').length;
    if ($('.toolbar#tool' + i).is(':visible')) {
        i++;
    }
	var $this = $(this);

	var def_data = {
        'b' : false,       
		'i' : false,
		'u' : false,
		's' : false,
		'l' : false,
		'c' : false,
		'r' : false,
		'j' : false,
		'list' : false,
		'url' : false,
		'img' : false,
		'imgUrl' : false,
		'code' : false,
		'quote' : false,
		'offtopic' : false,
		'player' : false,
		'fontcolor' : false,
		'fontsize' : false,
		'table' : false,
		'emoticons' : false
    };

    if (data) {
		var show=[];
		datata = data.split(',');
		for (var val in def_data) {
			show[val] = false;
        }   		
		$.each(datata,function(i,v) {
			show[v] = true;
		});
    }   
	else {
		var show=[];
		for (var val in def_data) {
			show[val] = true;
        }
	}
	$('body').on('click', '.toolbar#tool' + i +' > .button', function() {
        var alt = $(this).attr('alt');
        $this.addTags('[' + alt + ']', '[/' + alt + ']');
    });
    $('body').on("change", '.toolbar#tool' + i +' > .fontcolor', function() {
        $this.addTags('[color=' + $(this).val() + ']', '[/color]');
    });
    $('body').on("change", '.toolbar#tool' + i +' > .fontsize', function() {
        $this.addTags('[size=' + $(this).val() + ']', '[/size]');
    });
    $('body').on('click', '.toolbar#tool' + i +' > .unList', function() {
        $this.addTags("[list=un]\n[*]","[/*]\n[/list]");
    });
    $('body').on('click', '.toolbar#tool' + i +' > .orList', function() {
        $this.addTags("[list=or]\n[*]","[/*]\n[/list]");
    });
	$('body').on('click', '.toolbar#tool' + i +' > .listItem', function() {
        $this.addTags("\n[*]","[/*]");
    });
    $('body').on('click', '.toolbar#tool' + i +' > .addTable', function() {
        $this.addTable();
    });
    $('body').on('click', '.toolbar#tool' + i +' > .btnPicture', function() {
        $this.addImage();
    });
    $('body').on('click', '.toolbar#tool' + i +' > .btnLink', function() {
        $this.addUrl();
    });
    $('body').on('click', '.toolbar#tool' + i +' > .btnLinkPicture', function() {
        $this.addImgUrl();
    });
    $('body').on('click', '.toolbar#tool' + i +' > .vbox7, .toolbar#tool' + i +' > .youtube', function() {
		var site = $(this).attr('class').split(' ')[1];
        $this.addPlayer(site);
    });	
    $('body').on('click', '.toolbar#tool' + i +' > .showSmiles', function() {
        $this.showSmiles();
    });
    $('body').on('click', '.toolbar#tool' + i +' > .smiles > .emotions', function() {
        var alt = $(this).attr('alt');
        $this.addTags('', ' ' + alt + ' ');
    });	

	var tools = "";
    tools += "<div class=\"toolbar\" id=\"tool" + i + "\">";
    if(show['b']) tools += "<img class=\"button\" src=\"images/bold.gif\" alt=\"b\" title=\"Удебеленяване\" />";
    if(show['i']) tools += "<img class=\"button\" src=\"images/italic.gif\" alt=\"i\" title=\"Наклоняване\" />";
    if(show['u'])  tools += "<img class=\"button\" src=\"images/underline.gif\" alt=\"u\" title=\"Подчертаване\"/>";
    if(show['s'])  tools += "<img class=\"button\" src=\"images/strike.gif\" alt=\"s\" title=\"Зачеркване\"/>";
    if(show['l']) tools += "<img class=\"button\" src=\"images/left.png\" alt=\"l\" title=\"Подравняване в ляво\"/>";
    if(show['c']) tools += "<img class=\"button\" src=\"images/center.png\" alt=\"c\" title=\"Подравняване в центъра\"/>";
    if(show['r']) tools += "<img class=\"button\" src=\"images/right.png\" alt=\"r\" title=\"Подравняване в дясно\"/>";
    if(show['j']) tools += "<img class=\"button\" src=\"images/justify.png\" alt=\"j\" title=\"Двостранно подравняване\"/>";
    if(show['list']) {
		tools += "<img class=\"function unList\" src=\"images/unordered.gif\" title=\"Списък\"/>";
		tools += "<img class=\"function orList\" src=\"images/ordered.gif\" title=\"Списък с номерация\"/>";
		tools += "<img class=\"function listItem\" src=\"images/listItem.gif\" title=\"Елемент на списък\"/>";
	}
    if(show['url']) tools += "<img class=\"function btnLink\" src=\"images/link.gif\" title=\"Добави линк\"/>";
    if(show['img']) tools += "<img class=\"function btnPicture\" src=\"images/picture.gif\" title=\"Добави снимка\"/>";
    if(show['imgUrl']) tools += "<img class=\"function btnLinkPicture\" src=\"images/linkpic.gif\" title=\"Добави снимка с линк\"/>";
    if(show['quote']) tools += "<img class=\"button\" src=\"images/quote.gif\" alt=\"quote\" title=\"Цитат\"/>";
    if(show['code']) tools += "<img class=\"button\" src=\"images/code.gif\" alt=\"code\" title=\"Код\"/>";
    if(show['offtopic']) tools += "<img class=\"button\" src=\"images/offtopic.gif\" alt=\"offtopic\" title=\"Извън темата\"/>";

    if(show['player']) {
		tools += "<img class=\"function vbox7\" src=\"images/vbox.png\" id=\"vbox7\" title=\"vbox7\"/>";
		tools += "<img class=\"function youtube\" src=\"images/youtube.jpg\" id=\"youtube\" title=\"youtube\"/>";
	}
    if(show['fontcolor']) {tools += "<br /><select name=\"fontcolor\" class=\"fontcolor\">";
		tools += "<option value=\"0\" style=\"color:black\">Изберете цвят</option>";
		tools += "<option value=\"black\" style=\"color:black\">Черенo</option>";
		tools += "<option value=\"silver\" style=\"color:silver\">Сребро</option>";
		tools += "<option value=\"gray\" style=\"color:gray\">Сиво</option>";
		tools += "<option value=\"maroon\" style=\"color:maroon\">Кестеняво</option>";
		tools += "<option value=\"red\" style=\"color:red\">Червено</option>";
		tools += "<option value=\"navy\" style=\"color:navy\">Тъмносиньо</option>";
		tools += "<option value=\"blue\" style=\"color:blue\">Синьо</option>";
		tools += "<option value=\"green\" style=\"color:green\">Зелено</option>";
		tools += "<option value=\"olive\" style=\"color:olive\">Маслиненозелено</option>";
		tools += "<option value=\"yellow\" style=\"color:yellow;background-color:red;\">Жълто</option>";
		tools += "<option value=\"white\" style=\"color:white;background-color:#ADADAD;\">Бяло</option>";
		tools += "<option value=\"purple\" style=\"color:purple\">Пурпурен</option>";
		tools += "</select>";
	}
    if(show['fontsize']) {
		tools += "<select name=\"fontsize\" class=\"fontsize\">";
		tools += "<option value=\"0\">Изберете размер</option>";
		tools += "<option value=\"7\">Много малък</option>";
		tools += "<option value=\"9\">Малък</option>";
		tools += "<option value=\"12\">Нормален</option>";
		tools += "<option value=\"18\">Голям</option>";
		tools += "<option value=\"24\">Много голям</option>";
		tools += "</select>";
	}
    if(show['table']) {
		tools += "Колони: <input type='text' name='tbcols' class='tbcols' size='1' maxlength='2'/>";
		tools += "Редове: <input type='text' name='tbrows' class='tbrows' size='1' maxlength='2'/>";
		tools += "<input type='button' name='addTable' class='addTable' value='Добави таблица'/>";
	}
	if(show['emoticons']) tools += "<input type='button' class='showSmiles' value='Емотикони'/><div class='smiles'></div><br />"; //ако не искате да имате smiles махнете този ред!
    tools += "</div>";
    $this.before(tools);
	$this.appendTo('.toolbar#tool' + i);
    var dir = "smiles/"; //въведи папката в която са картинките
	var title = "";
    var link = ['smile.gif', 'sad.gif', 'laught.gif', 'bleh.gif', 'shy.gif', 'cool.gif', 'love.gif', 'angel.gif', 'bye.gif', 'thumbsup.gif', 'chin.gif', 'bop.gif',
            'crazy.gif', 'mad.gif', 'spock.gif', 'explode.gif', 'drool.gif', 'popcorn.gif', 'icecream.gif', 'arms.gif', 'baby.gif', 'badday.gif', 'bananadance.gif',
            'banned.gif', 'bash.gif', 'beer.gif', 'beer2.gif', 'biggrin.gif', 'blink.gif', 'bouncy.gif', 'bow.gif', 'cake.gif', 'chair.gif', 'cheekkiss.gif', 'cigar.gif',
            'clap.gif', 'clover.gif', 'clown.gif', 'confused.gif', 'console.gif', 'cry.gif', 'cry2.gif', 'cupid.gif', 'drinks.gif', 'dry.gif', 'dumbells.gif', 'dunce.gif',
            'evil.gif', 'evilmad.gif', 'excited.gif', 'fart.gif', 'fish.gif', 'fishing.gif', 'flowers.gif', 'gathering.gif', 'goodgrief.gif', 'greedy.gif', 'group.gif',
            'guns.gif', 'happy.gif', 'happy2.gif', 'happyno.gif', 'happyyes.gif', 'hbd.gif', 'hooray.gif', 'horse.gif', 'hug.gif', 'huglove.gif', 'hump.gif', 'jawdrop.gif',
            'kissing.gif', 'kissing2.gif', 'lol.gif', 'look.gif', 'lovers.gif', 'music.gif', 'no.gif', 'ohmy.gif', 'ouch.gif', 'poke.gif', 'puke.gif', 'rant.gif', 'rant2.gif',
            'rofl.gif', 'rolleyes.gif', 'shoot.gif', 'shoot2.gif', 'shutup.gif', 'sick.gif', 'slaphead.gif', 'sleep.gif', 'sleeping.gif', 'smartass.gif', 'snap.gif',
            'stamp.gif', 'stereo.gif', 'strongbench.gif', 'tears.gif', 'tease.gif', 'therethere.gif', 'thumbsdown.gif', 'unsure.gif', 'wavecry.gif', 'weakbench.gif', 'weirdo.gif',
            'what.gif', 'whip.gif', 'whistle.gif', 'wiggle.gif', 'wink.gif', 'worthy.gif', 'wub.gif', 'yawn.gif', 'yikes.gif']; //въведи името на всяка една картинка
    var icon = [':)', ':(', ':D', ':P', '(shy)', '8)', '(h)', '(angel)', '(bye)', '(thumbsup)', '(chin)', '(bop)', '(crazy)', '(mad)', '(spock)', ':@', '(drool)',
            '(popcorn)', '(icecream)', '(arms)', '(baby)', '(badday)', '(bananadance)', '(banned)', '(bash)', '(beer)', '(beer2)', '(biggrin)', '(blink)', '(bouncy)', '(bow)', '(cake)',
            '(chair)', '(cheekkiss)', '(cigar)', '(clap)', '(clover)', '(clown)', '(confused)', '(console)', ';(', ':S', '(cupid)', '(drinks)', '(dry)', '(dumbells)', '(dunce)',
            '(evil)', '(evilmad)', '(excited)', '(fart)', '(fish)', '(fishing)', '(flowers)', '(gathering)', '(goodgrief)', '(greedy)', '(group)', '(guns)', '(happy)', '(happy2)',
            '(happyno)', '(happyyes)', '(hbd)', '(hooray)', '(horse)', '(hug)', '(huglove)', '(hump)', '(jawdrop)', ':*', '(kissing2)', '(lol)', '(look)', '(lovers)', '(music)', '(no)',
            '(ohmy)', '(ouch)', '(poke)', '(puke)', '(rant)', '(rant2)', '(rofl)', '(rolleyes)', '(shoot)', '(shoot2)', ':X', '(sick)', '(slaphead)', '(sleep)', '(sleeping)',
            '(smartass)', '(snap)', '(stamp)', '(stereo)', '(strongbench)', '(tears)', '(tease)', '(therethere)', '(thumbsdown)', '(unsure)', '(wavecry)', '(weakbench)', '(weirdo)',
            '(what)', '(whip)', '(whistle)', '(wiggle)', ';)', '(worthy)', '(wub)', '(yawn)', '(yikes)'];  //въведи съответния текст(иконката) който ще се добавя в textarea-та

    jQuery.each(link, function(i, v) { //за всяки веведен линк...
        var cont = $('.smiles').html();
		title = v.split('.')[0];
        $('.smiles').html(cont + "<img src='" + dir + v + "' class=\"emotions\" title=\""+title+"\" alt=\"" + icon[i] + "\"/> "); //... ще се добавя нов img над textareata
    });
}
$.fn.checkSelect = function() { //функция проверяваща дали има селектиран текст
    var $this = $(this);
    var len = $this.val().length;
    var start = $this[0].selectionStart;
    var end = $this[0].selectionEnd;
    var selectedText = $this.val().substring(start, end);
    if (selectedText) return selectedText;
    else return false;
}

$.fn.selectRange = function(start, end) {//функция преместваща курсора
    return this.each(function() {
        if (this.setSelectionRange) {	
            this.focus();
            this.setSelectionRange(start, end);
        } else if (this.createTextRange) {
            var range = this.createTextRange();
            range.collapse(true);
			range.moveStart('character', start);
            range.moveEnd('character', end);            
            range.select();
        }
    });
}

$.fn.showSmiles = function() { //функция за показване на списъка с емотиконките
    $this = $(this);
	$the = $this.parents('.toolbar');
    $the.find('.smiles').stop();
    var position = $the.find('.showSmiles').position();
	var widthsh = $the.find('.showSmiles').width();
    var height = $the.find('.showSmiles').height()+7;
    var width = $the.find('.smiles').width() / 2;
    $the.find('.smiles').css({
        left: position.left - width + widthsh,
        top: position.top + height
    });
    if (!$the.find('.smiles').is(':visible')) $the.find('.smiles').slideDown('fast');
    var mouse_is_inside = false;
    $('.smiles').hover(function() {
        mouse_is_inside = true;
    }, function() {
        mouse_is_inside = false;
    });
    $("body").mouseup(function() {
        if (!mouse_is_inside) $the.find('.smiles').slideUp('fast');
    });
}

$.fn.addTags = function(openTag, closeTag) { //функция за добавяне на тагове
    if (closeTag == "[/color]" || closeTag == "[/size]") {
        $("option[value='0']").attr('selected', 'selected');
    } //ако таг2 е [/color] или [/size] при изпълнение на функцията ще се селектне отново първия option
    var $this = $(this);	
	var select = $this.checkSelect();
    var scrollTop = $this.scrollTop;
    var scrollLeft = $this.scrollLeft;
    var len = $this.val().length;
    var start = $this[0].selectionStart;
    var end = $this[0].selectionEnd;
    var selectedText = $this.val().substring(start, end);
    var replacement = openTag + selectedText + closeTag;
    $this.val($this.val().substring(0, start) + replacement + $this.val().substring(end, len));
    $this.scrollTop = scrollTop;
    $this.scrollLeft = scrollLeft;
	var oplen = (openTag != "") ? openTag.length+start : closeTag.length+end ;
	var cllen = closeTag.length+end;
	if(select) $this.selectRange(end+cllen,end+cllen);
	else $this.selectRange(oplen,oplen);
}

$.fn.addPlayer = function(site) {//функция за добавяне на плеъра от vbox7.com или youtube.com
    $this = $(this);
    var select = $this.checkSelect();
    var text;
    if (select) {
		if(select.indexOf(site+'.com') > -1) $this.addTags("[" + site + "]", "[/" + site + "]");    
	}
    else {
        jqcustom('Въведете линк от <a href="http://' + site + '.com" target="_blank">http://' + site + '.com</a>', {
            'type': 'prompt',
            'title': 'Добавяне на player',
            'ok': 'Готово',
            'cancel': 'Отказ',
            'value': 'http://'
        }, function(url) {
            if (url && url != 'http://' && url.indexOf(site+'.com') > -1 ) {
                text = "[" + site + "]" + url + "[/" + site + "]";
                $this.addTags('', text);
            }
        });
    }
}

$.fn.addTable = function() { //функция за създаване на таблица    
    var $this = $(this); //взимаме id-то на textarea-та
	$the = $this.parents('.toolbar');
    var rows = $the.find('.tbrows').val(); //стойноста на input rows т.е колко реда да има таблицата
    var cols = $the.find('.tbcols').val(); //стойноста на input cols т.е колко колони да има таблицата
    var text = "\n[table]\n";
    for (i = 1; i <= rows; i++) { //за всяки ред добавяме код за редове
        text += "[tr]\n";
        for (k = 1; k <= cols; k++) { //за всяки колона добавяме код за колона
            text += "[td]";
            text += "[/td]\n";
        }
        text += "[/tr]\n";
    }
    text += "[/table]\n";
    if (cols > 0 && rows > 0) $this.addTags('', text); //добавяме таблицата към textarea-та
    $the.find('.tbrows').val("");
    $the.find('.tbcols').val(""); //изчистваме 2-та input-а
}

$.fn.addImage = function() { //функция за добавяне на снимка
    $this = $(this);
    var text;
    var select = $this.checkSelect();
    if (select) {
        $this.addTags('[img]', '[/img]');
    } else {
        jqcustom('Въведи линк към картинката', {
            'type': 'prompt',
            'title': 'Добавяне на картинката',
            'ok': 'Готово',
            'cancel': 'Отказ',
            'value': 'http://'
        }, function(url) {
            if (url && url != 'http://') {
                text = '[img]' + url + '[/img]';
                $this.addTags('', text);
            }
        });
    }
}

$.fn.addUrl = function() { //функция за добавяне на линк
    $this = $(this);
    var text;
    var select = $this.checkSelect();
    jqcustom('Въведете линк', {
        'type': 'prompt',
        'title': 'Добавяне на линк',
        'ok': 'Готово',
        'cancel': 'Отказ',
        'value': 'http://'
    }, function(url) {
        if (url && url != 'http://') {
            if (select) {
                $this.addTags('[url=' + url + ']', '[/url]');
            } else {
                jqcustom('Въведете име на линка', {
                    'type': 'prompt',
                    'title': 'Добавяне на линк',
                    'ok': 'Готово',
                    'cancel': 'Отказ'
                }, function(url2) {
                    url2 = (url2) ? url2 : "link";
                    text = '[url=' + url + ']' + url2 + '[/url]';
                    $this.addTags('', text);
                });
            }
        }
    });
}

$.fn.addImgUrl = function() { //функция за добавяне на снимка с линк
    $this = $(this);
    var text;
    var select = $this.checkSelect();
    jqcustom('Въведете линк', {
        'type': 'prompt',
        'title': 'Добавяне на линк с картинка',
        'ok': 'Готово',
        'cancel': 'Отказ',
        'value': 'http://'
    }, function(url) {
        if (url && url != 'http://') {
            if (select) {
                $this.addTags('[img=' + url + ']', '[/img]');
            } else {
                jqcustom('Въведи линк към картинката', {
                    'type': 'prompt',
                    'title': 'Добавяне на линк с картинка',
                    'ok': 'Готово',
                    'cancel': 'Отказ',
                    'value': 'http://'
                }, function(url2) {
                    if (url2 && url2 != 'http://') {
                        text = '[img=' + url + ']' + url2 + '[/img]';
                        $this.addTags('', text);
                    }
                });
            }
        }
    });
}

$(function() {
	$(".showoff").click(function() { //скрипт за показване съдържанието на offtopic
		$(this).parents(".offtable").find(".offtopic").toggle();
	});
});

BBbutons.css

.button,.function {
    border: 1px solid
	#ccc;margin: 1px;
	padding: 2px;
}

.button:hover,.function:hover {
    filter: progid: DXImageTransform.Microsoft.Alpha(opacity = 60);
	-moz-opacity: 0.6;
	opacity: 0.6;
}

.smiles {
    border: black 1px solid;
	display: none;
	position: absolute;
	background: #b7b8ba;
	width: 600px ;
}
.smiles img {
	cursor: pointer;
}

.code {
	border:solid 1px black;
	width:90%;
}

.quote {
	background-color:#C7C7C7;
	border:solid 1px black;
	width:90%;
}

.offtopic {
	width:90%;
	display:none;
	background-color:#C7C7C7;
	border:solid 1px black;
}

bbcode.php

<?php
function bbcode($text) {		
    $text = preg_replace("/\[b\](.+?)\[\/b\]/is", '<b>$1</b>', $text); //заменяме bbcode [b]текст[/b] с html-а <b>текст</b>... надолу се прави абсолютно същотото за всеки bbcode

    $text = preg_replace("/\[i\](.+?)\[\/i\]/is", '<i>$1</i>', $text);

    $text = preg_replace("/\[u\](.+?)\[\/u\]/is", '<u>$1</u>', $text);

    $text = preg_replace("/\[l\](.+?)\[\/l\]/is",
        '<div style="text-align:left;">$1</div>', $text);

    $text = preg_replace("/\[c\](.+?)\[\/c\]/is",
        '<div style="text-align:center;">$1</div>', $text);

    $text = preg_replace("/\[r\](.+?)\[\/r\]/is",
        '<div style="text-align:right;">$1</div>', $text);

    $text = preg_replace("/\[j\](.+?)\[\/j\]/is",
        '<div style="text-align:justify;">$1</div>', $text);

    $text = preg_replace("/\[s\](.+?)\[\/s\]/is", '<strike>$1</strike>', $text);   

    $patterns = array('
						/\[url\=(.*?)\](.*?)\[\/url\]/is', 
						'/\[img\=(.*?)\](.*?)\[\/img\]/is',
						'/\[url\](.*?)\[\/url\]/is', 
						'/\[img\](.*?)\[\/img\]/is', 
						'/(^(http|https)(\S+))/is'
					);
    $replaces = array('<a href="$1" target="_blank">$2</a>',
        '<a href="$1" target="_blank"><img src="$2" target="_blank"/></a>',
        '<a href="$1" target="_blank">$1</a>', '<img src="$1" target="_blank"/>',
        '<a href="$1" target="_blank">$1</a>');

    $text = preg_replace($patterns, $replaces, $text);

    $text = preg_replace("/\[list=un\](.+?)\[\/list\]/is", '<ul>$1</ul>', $text);

    $text = preg_replace("/\[list=or\](.+?)\[\/list\]/is", '<ol>$1</ol>', $text);

    $text = preg_replace("/\[\*\](.+?)\[\/\*\]/is", '<li>$1</li>', $text);

    $text = preg_replace("/\[quote\](.+?)\[\/quote\]/is",
        '<table cellspacing="1" border="0"><tr><td class="quote">Цитат:</td></tr><tr><td>$1</td></tr></table>',
        $text);

    $text = preg_replace("/\[quote\=(.+?)](.+?)\[\/quote\]/is",
        '<table cellspacing="1" border="0"><tr><td class="quote">$1 каза:</td></tr><tr><td>$2</td></tr></table>',
        $text);

    $text = preg_replace("/\[color\=(.+?)\](.+?)\[\/color\]/is",
        '<span style="color:$1">$2</span>', $text);

    $text = preg_replace("/\[size\=(.+?)\](.+?)\[\/size\]/is",
        '<span style="font-size:$1px;">$2</span>', $text);

    $text = preg_replace("/\[code\](.+?)\[\/code\]/is",
        '<table cellspacing="1" border="0"><tr><td>Code:</td></tr><tr><td class="code"><code class="prettyprint">$1</code></td></tr></table>',
        $text);

    $dir = "smiles"; //папката в която са картинките
    $smiles = array(':)', ':(', ':D', ':P', '(shy)', '8)', '(h)', '(angel)', '(bye)',
        '(thumbsup)', '(chin)', '(bop)', '(crazy)', '(mad)', '(spock)', ':@', '(drool)',
        '(popcorn)', '(icecream)', '(arms)', '(baby)', '(badday)', '(bananadance)',
        '(banned)', '(bash)', '(beer)', '(beer2)', '(biggrin)', '(blink)', '(bouncy)',
        '(bow)', '(cake)', '(chair)', '(cheekkiss)', '(cigar)', '(clap)', '(clover)',
        '(clown)', '(confused)', '(console)', ';(', ':S', '(cupid)', '(drinks)', '(dry)',
        '(dumbells)', '(dunce)', '(evil)', '(evilmad)', '(excited)', '(fart)', '(fish)',
        '(fishing)', '(flowers)', '(gathering)', '(goodgrief)', '(greedy)', '(group)',
        '(guns)', '(happy)', '(happy2)', '(happyno)', '(happyyes)', '(hbd)', '(hooray)',
        '(horse)', '(hug)', '(huglove)', '(hump)', '(jawdrop)', ':*', '(kissing2)',
        '(lol)', '(look)', '(lovers)', '(music)', '(no)', '(ohmy)', '(ouch)', '(poke)',
        '(puke)', '(rant)', '(rant2)', '(rofl)', '(rolleyes)', '(shoot)', '(shoot2)',
        ':X', '(sick)', '(slaphead)', '(sleep)', '(sleeping)', '(smartass)', '(snap)',
        '(stamp)', '(stereo)', '(strongbench)', '(tears)', '(tease)', '(therethere)',
        '(thumbsdown)', '(unsure)', '(wavecry)', '(weakbench)', '(weirdo)', '(what)',
        '(whip)', '(whistle)', '(wiggle)', ';)', '(worthy)', '(wub)', '(yawn)',
        '(yikes)'); //текста който е бил в textarea-та
    $smileslink = array('smile.gif', 'sad.gif', 'laught.gif', 'bleh.gif', 'shy.gif',
        'cool.gif', 'love.gif', 'angel.gif', 'bye.gif', 'thumbsup.gif', 'chin.gif',
        'bop.gif', 'crazy.gif', 'mad.gif', 'spock.gif', 'explode.gif', 'drool.gif',
        'popcorn.gif', 'icecream.gif', 'arms.gif', 'baby.gif', 'badday.gif',
        'bananadance.gif', 'banned.gif', 'bash.gif', 'beer.gif', 'beer2.gif',
        'biggrin.gif', 'blink.gif', 'bouncy.gif', 'bow.gif', 'cake.gif', 'chair.gif',
        'cheekkiss.gif', 'cigar.gif', 'clap.gif', 'clover.gif', 'clown.gif',
        'confused.gif', 'console.gif', 'cry.gif', 'cry2.gif', 'cupid.gif', 'drinks.gif',
        'dry.gif', 'dumbells.gif', 'dunce.gif', 'evil.gif', 'evilmad.gif', 'excited.gif',
        'fart.gif', 'fish.gif', 'fishing.gif', 'flowers.gif', 'gathering.gif',
        'goodgrief.gif', 'greedy.gif', 'group.gif', 'guns.gif', 'happy.gif',
        'happy2.gif', 'happyno.gif', 'happyyes.gif', 'hbd.gif', 'hooray.gif',
        'horse.gif', 'hug.gif', 'huglove.gif', 'hump.gif', 'jawdrop.gif', 'kissing.gif',
        'kissing2.gif', 'lol.gif', 'look.gif', 'lovers.gif', 'music.gif', 'no.gif',
        'ohmy.gif', 'ouch.gif', 'poke.gif', 'puke.gif', 'rant.gif', 'rant2.gif',
        'rofl.gif', 'rolleyes.gif', 'shoot.gif', 'shoot2.gif', 'shutup.gif', 'sick.gif',
        'slaphead.gif', 'sleep.gif', 'sleeping.gif', 'smartass.gif', 'snap.gif',
        'stamp.gif', 'stereo.gif', 'strongbench.gif', 'tears.gif', 'tease.gif',
        'therethere.gif', 'thumbsdown.gif', 'unsure.gif', 'wavecry.gif', 'weakbench.gif',
        'weirdo.gif', 'what.gif', 'whip.gif', 'whistle.gif', 'wiggle.gif', 'wink.gif',
        'worthy.gif', 'wub.gif', 'yawn.gif', 'yikes.gif'); //въведи съответното име на всяка една картинка
    $i = 0;
    foreach ($smiles as $sm) {
        $title = preg_replace('/\.(png|gif|jpeg|jpg)/i', '', $smileslink[$i]);
        $text = str_replace(" ".$sm." ", "<img src='$dir/$smileslink[$i]' title='$title'/>", $text);
        $i++;
    }

    $text = nl2br($text); //преобразува всички празни редове до <br />

    $s1s = array('/\[table\]\<br \/\>/is', '/\[td\]\<br \/\>/is', '/\[\/td\]\<br \/\>/is',
        '/\[tr\]\<br \/\>/is', '/\[\/tr\]\<br \/\>/is', '/\<li\>\<br \/\>/is', '/\<\/li\>\<br \/\>/is',
        '/\<ol\>\<br \/\>/is', '/\<ul\>\<br \/\>/is');
    $bez = array('[table]', '[td]', '[/td]', '[tr]', '[/tr]', '<li>', '</li>',
        '<ol>', '<ul>');
    $text = preg_replace($s1s, $bez, $text); //махам <br /> от някои места за да се изместват нещата

    $text = preg_replace("/\[table\](.+?)\[\/table\]/is",
        '<table border="1" max-width="600">$1</table>', $text);

    $text = preg_replace("/\[tr\](.+?)\[\/tr\]/is", '<tr>$1</tr>', $text);

    $text = preg_replace("/\[td\](.+?)\[\/td\]/is", '<td>$1</td>', $text);

    if (preg_match_all('/\(.+?)\[\/youtube\]/is', $text, $answers, PREG_SET_ORDER)) {
        foreach($answers AS $answer) {			
            if (preg_match('/youtube.com\/watch\?v\=(.+?)([\&])/is', $answer[1] . '&', $id)) {
                $embed = '<iframe width="420" height="315" src="http://www.youtube.com/embed/' .
                    $id[1] . '" frameborder="0" allowfullscreen></iframe>';
                $text = str_replace($answer[0], $embed, $text);
            } else
                $text = str_replace($answer[0], '', $text);
        }
    }

    if (preg_match_all('/\[vbox7\](.+?)\[\/vbox7\]/is', $text, $answers, PREG_SET_ORDER)) {
        foreach($answers AS $answer) {
            if (preg_match('/vbox7.com\/play\:(.+?)([\&])/is', $answer[1] . '&', $id)) {
                $embed = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="450" height="403"><param name="movie" value="http://i48.vbox7.com/player/ext.swf?vid=' .
                    $id[1] . '"><param name="quality" value="high"><embed src="http://i48.vbox7.com/player/ext.swf?vid=' .
                    $id[1] . '" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="450" height="403"></embed></object>';
                $text = str_replace($answer[0], $embed, $text);
            } else
                $text = str_replace($answer[0], '', $text);
        }
    }

	$text = preg_replace("/\[offtopic\](.+?)\[\/offtopic\]/is", 
	'<table class="offtable" cellspacing="1" border="0"><tr><td><input type="button" class="showoff" value="offtopic"/></td></tr><tr><td class="offtopic">$1</td></tr></table>', 
	$text);

    return stripslashes($text); //връща променото съдържание
}
?>

demo.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="content-type" content="text/html;  charset=UTF-8" />
    <title>bbcode editor+parser</title>
	<link rel='stylesheet' href='jQcustom.css' type='text/css' media='all'/> 
	<link rel='stylesheet' href='prettify.css' type='text/css' media='all'/> 
	<link rel='stylesheet' href='BBbutons.css' type='text/css' media='all'/> 
	<script src="http://code.jquery.com/jquery-latest.js" type="text/javascript"></script> 
	<script src="jQcustom.js"  type="text/javascript"></script>
	<script src="BBbutons.js"  type="text/javascript"></script> 	
	<script src="prettify.js"  type="text/javascript"></script> 	
	<script>
		$(function() {
			prettyPrint();
		}); 
	</script> 
</head>
<body style="background: #ececec;">	  
	  <form method="post">
	  <script>
	  $(function() {
		$('#area').bbcodetoolbar();
	  }); 
	  </script> 
	  <textarea id="area" name="txtarea" cols="130" rows="20"></textarea><br />
	  <input type="submit" name="submit" value="Прегледай"/>
	  </form>	
	  <br />
	  <?php  
	  if(isset($_POST['submit'])) {
		include "bbcode.php";
		echo bbcode(htmlspecialchars($_POST['txtarea']));
	  }
	  ?>	    	 

	  </form>	
	  -----------------------------------------	  
	  <form method="post">
	  <script>
	  $(function() {
		$('#area2').bbcodetoolbar("b,i,s,img");//отделяте със запетаи бутоните които искате! Вижте js файла за текстовете за бутоните! 
	  }); 
	  </script> 
	  <textarea id="area2" name="txtarea2" cols="130" rows="20"></textarea><br />
	  <input type="submit" name="submit2" value="Прегледай"/>
	  </form>	
	  <br />
	  <?php  
	  if(isset($_POST['submit2'])) {
		include "bbcode.php";
		echo bbcode(htmlspecialchars($_POST['txtarea2']));
	  }
	  ?>	    	 

	  </form>	
	  </body>
	  </html>

Демо
Резервно демо(не е 24/7!)

Всички файлове(включително pretiffy и jQcustom v2 и всички картинки и емотиконки
Резервен архив(не е 24/7!)
Резервен архив 2

Урока в Web-Tourist.net

Надявам се скрипта да ви хареса :) Давам ви свободата да променяте дизайна и функциите както си искате, само да знаете какво правите! :D

При проблеми или въпроси ми пишете коментар или в форума на Web-Tourist.net :)!

Урока е авторски и забранявам копирането му в други сайтове без разрешението ми или това на администраторите!!! 

formats

Нов дизайн

Публикувана на 26.04.2012, от в Други.

Здравейте, реших да сложа малко по-опростен и същевременно елегантен дизайн, както и да сменя логото :) Какво мислите, как ви изглежда сайта сега?

До няколко дена напълно ще преведа темата, ще сменя favicon и ще оправя още някои неща :P

formats

Алтернативи на alert,confirm и prompt v2

Публикувана на 24.03.2012, от в Уроци.

Здравейте, ще ви покажа втората версия за създаване на алтернативни функции съответстващи на JavaScript функциите alert, confirm и prompt. В предната версия кода беше твърде много и твърде тежък и без много екстри и имаше бъгове. Затова реших да направя този по кратък, оптимизиран, функционален и подреден код! За новия код съм взел дизайна и част от кода тъй като нямаше смисъл да започвам от нулата :) .

jQcustom.js

// Втора версия за алтернативни alert,prompt и confirm функции
// Създател: Пламен Добрев (nicks:IzKuFeLiQqQqQ,plamba95)
// Програмни езици: jQuery v.1.7.1,CSS3,HTML5
// Дата: 14.03.2012
// Всички права запазени!
// Информация: Библиотека на jQuery е задължителна!!! Може да я изтеглите от http://jquery.com/ !
function jqcustom(content, data, callback) {
    var i = $('.jqcustom_windown').length;
    if ($('.jqcustom_windown#jqwin' + i).is(':visible')) {
        i++;
    }

    var def_data = {
        'type': 'alert',    //alert,prompt,confirm,custom
        'title': 'Съобщение от сайта!',
        'ok': 'Ок',
        'cancel': 'Отказ',
        'value': ''
    };

    if (data) {
        for (var val in def_data) {
            if (typeof data[val] == "undefined") data[val] = def_data[val];
        }
    }
	else {
		var data=[];
		for (var val in def_data) {
			data[val] = def_data[val];
        }
	}
    var output = "";
    output += "<div class='jqcustom_mask' id='jqmask" + i + "'></div><div class='jqcustom_windown' id='jqwin" + i + "'>";

    if(data['title'] != '' || (data['type'] == 'custom' && data['title'] != 'Съобщение от сайта!')) {
        output += "<div class='jqcustom_header'>";
        output += data['title'];
    }
    output += "<img src='http://cdn2.iconfinder.com/data/icons/gnomeicontheme/22x22/actions/window-close.png' alt='Затвори' style='float:right;' class='jqcustom_close'/>";
    if(data['title'] != '' || (data['type'] == 'custom' && data['title'] != 'Съобщение от сайта!')) output += "</div>";
    output += "<div class='jqcustom_content'>";
    if(data['type'] != 'custom') {
        output += content+ "<div>";
        if (data['type'] == 'prompt') output += "<input type='text' class='jqcustom_textarea' value='" + data['value'] + "'/><br />";
        output += "<center><input type='button' class='jqcustom_ok' value='" + data['ok'] + "'/>";
        if (data['type'] == 'confirm' || data['type'] == 'prompt') output += "<input type='button' class='jqcustom_cancel' value='" + data['cancel'] + "'/>";
        output += "</center></div>";
    }
    output += "</div></div></div>";
    $('body').append(output);

    if(data['type'] == 'custom') {
        $('body').find('#'+content).appendTo('.jqcustom_content');
        $('body').find('#'+content).show();
    }

	if (data['type'] == 'prompt') {
		setTimeout(function() { $('.jqcustom_windown#jqwin' + i).find('.jqcustom_textarea').focus().select(); }, 50);
	}

    function jqcustom_center() {
        $('.jqcustom_mask#jqmask' + i).css({
            'width': $(window).width(),
            'height': $(window).height()
        });
        if(data['type'] == 'custom') {
	        $('.jqcustom_windown#jqwin' + i).width("auto");
            $('.jqcustom_windown#jqwin' + i).find('.jqcustom_close').css({'margin-top':'-12px','margin-right':'-12px'});
	   }
        $('.jqcustom_windown#jqwin' + i).css({
            'left': ($(window).width() - $('.jqcustom_windown#jqwin' + i).width()) / 2 + $(window).scrollLeft() + "px",
            'top': ($(window).height() - $('.jqcustom_windown#jqwin' + i).height()) / 2 + $(window).scrollTop() + "px"
        });
    }
    $(window).ready(jqcustom_center).resize(jqcustom_center);

    $('.jqcustom_mask#jqmask' + i).fadeTo("slow", 0.8);
    $('.jqcustom_windown#jqwin' + i).fadeIn('medium');

	function jqcustom_close() {
        $(".jqcustom_windown#jqwin" + i + ",.jqcustom_mask#jqmask" + i).fadeOut("medium", function() {
            if(data['type'] == 'custom') {
                $('body').find('#'+content).hide();
                $('body').find('#'+content).appendTo('#content');
            }
            $(".jqcustom_windown#jqwin" + i + ",.jqcustom_mask#jqmask" + i).remove();
        });
    }

	function jqcustom_ok() {
		if (callback) {
			if (data['type'] == 'alert' || data['type'] == 'confirm') callback(true);
			else if (data['type'] == 'prompt') callback($('.jqcustom_textarea').val());
		}
		jqcustom_close();
	}

    $(document).unbind('keydown').bind('keydown',function(e) {
		if (e.keyCode == 27) {
			if (callback) {
				callback(false);
			}
			jqcustom_close();
		}
		else if (e.keyCode == 13) {
			jqcustom_ok();
		}
    });
	$('.jqcustom_mask#jqmask' + i).click(function() {
		if (callback) {
            callback(false);
        }
        jqcustom_close();
    });

    $('.jqcustom_windown#jqwin' + i).find(".jqcustom_close,.jqcustom_cancel,.jqcustom_mask#jqmask" + i).click(function() {
		if (callback) {
            callback(false);
        }
        jqcustom_close();
    });

    $('.jqcustom_windown#jqwin' + i).find('.jqcustom_ok').click(function() {
        jqcustom_ok();
    });
}

jQcustom.css

 

.jqcustom_mask {
	position:absolute;
	left:0;
	top:0;
	z-index:10;
	background-color:#000000;
	display:none;
} 

.jqcustom_windown{
	background-color:lightgreen;
	border:1px solid black;
	height:auto;
	width:400px;
	position:absolute;
	z-index:100;
	-webkit-border-radius: 10px;
	-moz-border-radius: 10px;
	border-radius: 10px;
	display:none;
}

.jqcustom_header {
	background-color:lightblue;
	padding:3px 3px 3px 3px;
	-moz-border-radius-topleft: 10px;
	-moz-border-radius-topright: 10px;
	-moz-border-radius-bottomright: 0px;
	-moz-border-radius-bottomleft: 0px;
	-webkit-border-radius: 10px 10px 0px 0px;
	border-radius: 10px 10px 0px 0px;
}

.jqcustom_content{
	padding:3px 3px 3px 3px;
	height:100%;
}

.jqcustom_close:hover {
	background-color: rgba(255, 255, 255, 0.7);
	-webkit-border-radius: 10px;
	-moz-border-radius: 10px;
	border-radius: 10px;
}
.jqcustom_textarea {
	width:99%;
}

Примерна страница

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="content-type" content="text/html;  charset=UTF-8" />
    <title>Алтернативни alert,prompt и confirm функции v2</title>
	<link rel='stylesheet' href='jQcustom.css' type='text/css' media='all'/>
	<script src="http://code.jquery.com/jquery-latest.js"  type="text/javascript"></script>
	<script src="jQcustom.js"  type="text/javascript"></script>
	<script>
	$(function() {
		$('#alert').click(function() {
			jqcustom('alert',{'title' : 'alert it','ok' : 'дообре'});
			return false;
		});

		$('#confirm').click(function() {
			jqcustom('confirm',{'type' : 'confirm','title' : 'alert it','ok' : 'дообре'},function(r) {
					if(r) $('#result').html('Натисна Ок');
					else $('#result').html('Натисна "Откажи" или затвори прозореца!');
			});
			return false;
		});

		$('#prompt').click(function() {
			jqcustom('prompt that thing',{'type' : 'prompt','value' : 'test','title' : 'prompt it','ok' : 'както кажиш','cancel' : 'а не'},function(er) {
					if(er) $('#result').html("Въведе: "+er);
					else $('#result').html('Натисна "Откажи" или затвори прозореца, не си въвел стойност!');
			});
			return false;
		});

		$('#promptalert').click(function() {
			jqcustom('prompt that with alert',{'type' : 'prompt','value' : 'test with alert','title' : 'prompt it','ok' : 'както кажиш','cancel' : 'а не'},function(r) {
					if(r) {
						jqcustom(r,{'title' : 'В полето въведохте'},function(ree) {$('#result').html("И alert е затворен");});
					}
					else $('#result').html('Натисна "Откажи" или затвори прозореца, не си въвел стойност!');
			});
			return false;
		});
	});
	</script>

</head>
<body>
	<div id="alert">alert</div>
	<div id="confirm">confirm</div>
	<div id="prompt">prompt</div>
	<div id="promptalert">prompt and alert</div>
	<br /><br />
	<div id="result"></div>
 </body>
 </html>

Демо
Резервно демо(не е 24/7!)

Файловете от урока
Резервно копие на файловете
Резервно копие на файловете

Урока в Web-Tourist.net

Надявам се скрипта да ви хареса :) Давам ви свободата да променяте дизайна и функциите както си искате, само да знаете какво правите! :D

При проблеми или въпроси ми пишете коментар или в форума на Web-Tourist.net :)!

Урока е авторски и забранявам копирането му в други сайтове без разрешението ми или това на администраторите!!! 

formats

Flash банери/реклами

Публикувана на 22.11.2011, от в Клюки.

Здравейте, с голяма радост мога да ви споделя, че от днес предлагам и изработката на Flash банери и реклами, във всякакви размери! Използвам Adobe Flash CS5.5 и ActionScript 3. Занимавам се от няколко дни с това, но уроците които гледам из интернет пространството, и нещата които сам измислям, ме развиха доста, а пък и с времето ще ставам още по добър… :)

Ако искате да си поръчате реклама, можете да ми пишете в формата за контакти или оставите коментар някъде из сайта. Цената е по договорка и се определя от сложноста и размерите на банера!

formats

Двумерни масиви в C++

Публикувана на 30.10.2011, от в Уроци.

В този урок ще ви покажа как се декларират, инициализират и извеждат двумерни масиви в c++ и как да се работи с тях и диагоналите им. Работната среда, която използвам е Dev C++!
Чрез двумерния масив също така се нарича матрица която има зададени колони(в някои учебници може да го срещнете като „стълб“) и редове.
Има два вида матрица:

  1. Квадратна матрица където колоните са равни на редовете
  2. Правоъгълна матрица където колоните НЕ са равни на редовете

Ето какво представлява квадратна матрица с 4 колони и 4 реда:

А правоъгълна матрица с 3 колони и 4 реда изглежда така:

Не забравяйте, че във всички програмни езици броенето започва от 0 а не от 1!

Декларирането на двумерен масив става по следния начин:

int a[m][n];

като „m“ са колоните, а „n“ редовете в нашата матрица, като стойностите им са зададени в програмата

int m = 3,n = 4;//3 колони с по 4 реда

или са въведете чрез оператора cin

int m,n;
cin>>m>>n;

Инициализацията(задаването на стойности) става по 2 начина:

    1. В самата програма, като фрагмент от кода:
      • Първин начин – деклариране и инициализация в едно:
        int a[3][4]={
        {1,2,3,4},
        {5,6,7,8},
        {9,10,11,12}
        };//3 колони с по 4 реда
      • Втори начин – деклариране и след това инициализация на всека колона с ред:
        int a[3][4];//3 колони с по 4 реда
        a[0][0] = 1;
        a[0][1] = 2;
        a[0][2] = 3;
        a[0][3] = 4;
        a[1][0] = 5;
        a[1][1] = 6;
        a[1][2] = 7;
        a[1][3] = 8;
        a[2][0] = 9;
        a[2][1] = 10;
        a[2][2] = 11;
        a[2][3] = 12;

Като след въвеждането на тези стойности матрицата ще изглежда така

  1. Въведени чрез оператора cin и 2 цикъла с брояч(for):
    int a[m][n];//Като сте задали стойности на m и n
     for(int i=0;i<n;i++) {//Първия цикъл ВИНАГИ е за редовете...
       for(int j=0;j<m;j++) {//...а втория за колоните!
       cout<<"a["<<i<<"]["<<j<<"]=";
       cin>>a[i][j];
       }
     }

Извеждането на стойностите има става по този начин:

  1. Извеждане на стойноста на точно определени колона и ред
    cout<<a[1][2];//Това ще изведе стойноста на 3-рия ред от 2-рата колона
  2. Извеждане на стойностите на всички колони и редове
     for(int i=0;i<n;i++) {//Първия цикъл ВИНАГИ е за редовете...
       for(int j=0;j<m;j++) {//...а втория за колоните!
       cout<<"a["<<i<<"]["<<j<<"]="<<a[i][j]<<endl;
       }
     }

Диагонали в квадратната матрица:

  1. Главен диагонал

    Примерни задачи по главния диагонал:

    • Намиране на сбора на елементите по главния диагонал.
      Както забелязвате в таблицата по-горе номера на колоната и номера на реда по диагонала са еднакви, тоест в проверката ще проверяваме дали No.колона==No.ред.
      Ето и цялото решение на задачата

      #include<iostream.h>
      #include<conio.h>
      int main() {
       int n;
       double Sbor=0;
       cout<<"n=";
       cin>>n;//въвеждаме броя на колони и редове
       int a[n][n];
       for(int i=0;i<n;i++) {//започваме циклите за въвеждане на стойности
         for(int j=0;j<n;j++) {
         cout<<"a["<<i<<"]["<<j<<"]=";
         cin>>a[i][j];
         if(i==j) Sbor = Sbor + a[i][j];//проверяваме дали No.колона==No.ред и ако да добавяме ст-ста на елемента към общия сбор
         }
       }
       cout<<"Sbor="<<Sbor;
       getch();
       return 0;
      }
    • Намиране на сбора на елементите НАД главния диалонал.
      Както забелязвате в таблицата по-горе No.колона винаги е по-малък от No.реда, тоест проверката ще е No.колона < No.реда.
      За да не пишем излишен текст и код можете просто да вземете кода от горната задача, като само промените проверката от

      if(i==j)

      на

      if(i<j)
    • Намиране на сбора на елементите Под главния диалонал.
      Погледнете в таблицата по-горе… No.колона винаги е по-голям от No.реда, тоест тук вече проверката ще е No.колона > No.реда.
      Вземете кода от първата задача и променете проверката от

      if(i==j)

      на

      if(i>j)

      и сте готови :)

  2. Второстепенен(втори главен) диагонал

    Примерни задачи по второстепенния диагонал:
    • Намиране на сбора на елементите по второстепения диагонал.
      Както виждате в таблицата за втория главен диагонал по-горе сбора на No.колона и No.ред е равен на зададения брой колони и редове, тоест проверката ще е No.колона + No.реда == броя(n) – 1(защото започва да брои от 0)

      #include<iostream.h>
      #include<conio.h>
      int main() {
       int n;
       double Sbor=0;
       cout<<"n=";
       cin>>n;
       int a[n][n];
       for(int i=0;i<n;i++) {
         for(int j=0;j<n;j++) {
         cout<<"a["<<i<<"]["<<j<<"]=";
         cin>>a[i][j];
         if(i+j==n-1) Sbor = Sbor + a[i][j];
         }
       }
       cout<<"Sbor="<<Sbor;
       getch();
       return 0;
      }
    • Намиране на сбора на елементите НАД второстепения диагонал.
      Както виждате в таблицата за втория главен диагонал по-горе сбора на No.колона е по-малък от общия брой – No.ред – 1 е равен на зададения брой колони и редове, тоест проверката ще е No.колона < броя(n) No.ред – 1.
      За да спестим място вземете кода от горната задача и променете проверката от

      if(i+j==n-1)

      на

      if(i+j<n-1)
    • Намиране на сбора на елементите ПОД второстепения диагонал.
      Както виждате в таблицата за втория главен диагонал по-горе сбора на No.колона е по-голям от общия брой – No.ред – 1 е равен на зададения брой колони и редове, тоест проверката ще е No.колона > броя(n) No.ред – 1.
      За да спестим място вземете кода от по-по-горната задача и променете проверката от

      if(i+j==n-1)

      на

      if(i+j>n-1)

Останалите задачи се създават по същатата логика!

Ето това беше, дано съм ви бил полезен! При проблеми или въпроси ми пишете! :)

Урока е авторски и забранявам копирането му в други сайтове без разрешението ми!!!

formats

Контакт форма с AJAX и JQuery validate

Публикувана на 03.10.2011, от в Уроци.

Здравейте като малко упражнение реших да си създам контакт форма, но малко по разчупена и реших да комбинирам AJAX post функцията с JQuery validate. Направих 2 файла един с формата и JQuery-то и един за пращането на email-a.

Ето какво се получи:

form.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<script src="http://code.jquery.com/jquery-1.5.2.js" type="text/javascript"></script>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script type="text/javascript" src="http://jzaefferer.github.com/jquery-validation/jquery.validate.js"></script>
<title>Контакт форма с AJAX</title>
<style type="text/css">
label {width: 100px; float: left;}
label.error { float: none; color: red; padding-left: 10px; vertical-align: top; }
p { clear: both; }
</style>
<script src="script.js"  type="text/javascript"></script>
</head>
<body>

<form id="contact" method="post" action="post.php">
<p>
<label for="name">Име</label>
<input id="name" name="name" size="25"/>
</p>
<p>
<label for="email">E-Mail</label>
<input id="email" name="email" size="25" />
</p>
<p>
<label for="subject">Отностно</label>
<input id="subject" name="subject" size="25" />
</p>
<p>
<label for="message">Съобщение</label>
<textarea id="message" name="message" cols="22"></textarea>
</p>
<p>
<input type="submit" value="Прати"/>
</p>
</form>
<div id="res"></div>//в този див се извеждат резултатите
</body>
</html>

script.js

$(function(){
jQuery.extend(jQuery.validator.messages, {
required: "Това поле е задължително!",
remote: "Поправете полето!",
email: "Въведете валиден email адрес",
url: "Въведете валиден URL",
date: "Въведете валидна дата!",
dateISO: "Въведете валидна дата (ISO)!",
dateDE: "Bitte geben Sie ein g&#252;ltiges Datum ein.",
number: "Въведете валиден номер!",
numberDE: "Bitte geben Sie eine Nummer ein.",
digits: "Please enter only digits",
creditcard: "Please enter a valid credit card number.",
equalTo: "Въведете същатата стойност",
accept: "Please enter a value with a valid extension.",
maxlength: $.format("Въведете не повече от {0} символа."),
minlength: $.format("Въведете поне {0} символа."),
rangelength: $.format("Въведете между {0} и {1} символа."),
range: $.format("Въведете между {0} и {1} символа."),
max: $.format("Въведете по-малко или точно {0} символа."),
min: $.format("Въведете повече или точно {0} символа.")
}); //промяна на error съобщенията

$("#contact").validate({
submitHandler: function(){//създаване на функция при валидна форма и при натискането на submit бутона
var name = $("#name").val();
var email = $("#email").val();
var subject = $("#subject").val();
var message = $("#message").val();//вземане на стойностите на полетата
$("<img src='http://www.floen.com/ATOM/weather/loading.gif'/>").appendTo('#res');//изкарване на load bar преди да излезе съобщението от post.php(по надолу ще го видите)
$.ajax({ //пращаме данните
url: "post.php", //файла към който пращаме
type: "POST",
data: "name=" + name + "&email=" + email + "&subject=" + subject + "&message=" + message, // имената и стойностите на това което пращаме
success: function(res){ //при успешно изпращане на данните създаваме функция
if(res!="Грешка при изпращането! Опитайте отново!" OR res!="Грешка празни стойности на полетата!") {$("#contact").toggle("slow");}//ако post.php НЕ върне съобщението за грешка формата ще се скрие
$("#res").hide().text(res).fadeIn("slow");//заменя load bar-а с върнатото от post.php
}
});
return false;
}
});
});

post.php

<?php
$name = htmlspecialchars($_POST['name']);
$email = htmlspecialchars($_POST['email']);
$message = htmlspecialchars($_POST['message']);
$subject = htmlspecialchars($_POST['subject']);
if(trim($name)=="" OR trim($email)=="" OR trim($message)=="" OR trim($subject)=="") {$err="yes";}else {$err="no";}
$to = 'plambata95@abv.bg';//ВЪВЕДЕТЕ ВАШИЯ email!
$sub = $subject."(запитване)";
$mess = $message;
$headers = 'From: '."$name <$email>". "\r\n" .
'Reply-To: '.$email. "\r\n" .
"Content-Type:text/html; charset=UTF-8 \r\n".
'X-Mailer: PHP/' . phpversion();
if($err=="no") {
$mail = mail($to, $sub, $mess, $headers);
if($mail) {print "Вашето запитване е изпратено успешно! Ще получите отговор на $email в най-скоро време!";}
else {print "Грешка при изпращането! Опитайте отново!";}
} else {print "Грешка празни стойности на полетата!";}
?>

Направих го без дизайн защото не ми се занимава, но вие може да си сложите. Дано скрипта да ви е полезен :)

Демо
Демо 2

Урока е авторски и забранявам копирането му в други сайтове без разрешението ми!!!

formats

bbcode editor и parser

Публикувана на 03.10.2011, от в Уроци.

Здравейте, тъй като много хора търсят bbcode а тук уроците не са много богати реших да направя един простичък функционален bbcode editor и съответно bbcode parser. Взех един начален код и добавих още няколко функционалности като добавяне на html таблица. Смесих javascript с jquery защото някои неща не можах да ги преведа на jquery (като createRange и т.н) а с jquery ми е по-лесно да работя, но все пак всичко си работи перфекто.

Ето и файловете които написах.
BBbutons.js (тук са функциите за бутоните и за добавяне в посочената textarea, по-долу ще ви покажа как да посочите в коя textarea да се добавят нещата )

document.write("<script src='http://code.jquery.com/jquery-latest.js'></script>");//добяме последната версия на jquery
var textarea;
var content;

function bbcodetoolbar(obj) { //създаваме функцията за показване на bbcode editor-a
document.write("<style>.button {border: 1px solid #ccc;margin: 1px;padding: 2px;}.button:hover {filter:progid:DXImageTransform.Microsoft.Alpha(opacity=60);-moz-opacity: 0.6;opacity:0.6;}.ed {width: 400px;height: 150px;}</style>");//стила на бутоните
document.write("<div class=\"toolbar\">");
document.write("<img class=\"button\" src=\"images/bold.gif\" name=\"btnBold\" title=\"Удебеленяване\" onClick=\"addtags('','','" + obj + "')\">");
document.write("<img class=\"button\" src=\"images/italic.gif\" name=\"btnItalic\" title=\"Наклоняване\" onClick=\"addtags('[i]','[/i]','" + obj + "')\">");
document.write("<img class=\"button\" src=\"images/underline.gif\" name=\"btnUnderline\" title=\"Подчертаване\" onClick=\"addtags('[u]','[/u]','" + obj + "')\">");
document.write("<img class=\"button\" src=\"images/strike.gif\" name=\"btnUnderline\" title=\"Зачеркване\" onClick=\"addtags('[s]','[/s]','" + obj + "')\">");
document.write("<img class=\"button\" src=\"images/left.png\" name=\"btnUnderline\" title=\"Подравняване в ляво\" onClick=\"addtags('[l]','[/l]','" + obj + "')\">");
document.write("<img class=\"button\" src=\"images/center.png\" name=\"btnUnderline\" title=\"Подравняване в центъра\" onClick=\"addtags('[c]','[/c]','" + obj + "')\">");
document.write("<img class=\"button\" src=\"images/right.png\" name=\"btnUnderline\" title=\"Подравняване в дясно\" onClick=\"addtags('[r]','[/r]','" + obj + "')\">");
document.write("<img class=\"button\" src=\"images/justify.png\" name=\"btnUnderline\" title=\"Двостранно подравняване\" onClick=\"addtags('[j]','[/j]','" + obj + "')\">");
document.write("<img class=\"button\" src=\"images/unordered.gif\" name=\"btnUnderline\" title=\"Списък\" onClick=\"addlist('" + obj + "','un')\">");
document.write("<img class=\"button\" src=\"images/ordered.gif\" name=\"btnUnderline\" title=\"Списък с номерация\" onClick=\"addlist('" + obj + "','or')\">");
document.write("<img class=\"button\" src=\"images/link.gif\" name=\"btnLink\" title=\"Добави линк\" onClick=\"addurl('" + obj + "')\">");
document.write("<img class=\"button\" src=\"images/picture.gif\" name=\"btnPicture\" title=\"Добави снимка\" onClick=\"addimage('" + obj + "')\">");
document.write("<img class=\"button\" src=\"images/linkpic.gif\" name=\"btnPicture\" title=\"Добави снимка с линк\" onClick=\"addimgurl('" + obj + "')\">");
document.write("<img class=\"button\" src=\"images/quote.gif\" name=\"btnQuote\" title=\"Цитат\" onClick=\"addtags('[quote]','[/quote]','" + obj + "')\">");
document.write("<img class=\"button\" src=\"images/code.gif\" name=\"btnQuote\" title=\"Код\" onClick=\"addtags('[code]','[/code]','" + obj + "')\">");
document.write("<br><select name=\"fontcolor\" id=\"font\" onChange=\"addtags('[color='+$('#font').val()+']','[/color]','" + obj + "')\">");
document.write("<option value=\"0\" style=\"color:black\">Изберете цвят</option>");
document.write("<option value=\"black\" style=\"color:black\">Черенo</option>");
document.write("<option value=\"silver\" style=\"color:silver\">Сребро</option>");
document.write("<option value=\"gray\" style=\"color:gray\">Сиво</option>");
document.write("<option value=\"maroon\" style=\"color:maroon\">Кестеняво</option>");
document.write("<option value=\"red\" style=\"color:red\">Червено</option>");
document.write("<option value=\"navy\" style=\"color:navy\">Тъмносиньо</option>");
document.write("<option value=\"blue\" style=\"color:blue\">Синьо</option>");
document.write("<option value=\"green\" style=\"color:green\">Зелено</option>");
document.write("<option value=\"olive\" style=\"color:olive\">Маслиненозелено</option>");
document.write("<option value=\"yellow\" style=\"color:yellow;background-color:red;\">Жълто</option>");
document.write("<option value=\"white\" style=\"color:white;background-color:#ADADAD;\">Бяло</option>");
document.write("<option value=\"purple\" style=\"color:purple\">Пурпурен</option>");
document.write("</select>");
document.write("<select name=\"size\" id=\"size\" onChange=\"addtags('[size='+$('#size').val()+']','[/size]','" + obj + "')\">");
document.write("<option value=\"0\">Изберете размер</option>");
document.write("<option value=\"7\">Много малък</option>");
document.write("<option value=\"9\">Малък</option>");
document.write("<option value=\"12\">Нормален</option>");
document.write("<option value=\"18\">Голям</option>");
document.write("<option value=\"24\">Много голям</option>");
document.write("</select> ");
document.write("Колони: <input type='text' name='cols' id='cols' size='1' maxlength='2'/>");
document.write("Редове: <input type='text' name='rows' id='rows' size='1' maxlength='2'/>");
document.write("<input type='button' name='addt' value='Добави таблица' onClick=\"addtable('"+obj+"')\"/>");
document.write("</div>");
document.write("<div id='smiles' style='width:600px;'></div>");//ако не искате да имате smiles махнете този ред!

var dir = "smiles/";//въведи папката в която са картинките
var link=['smile.gif','sad.gif','laught.gif'];//въведи името на всяка една картинка
var icon=[':)',':(',':D'];//въведи съответния текст(иконката) който ще се добавя в textarea-та
jQuery.each(link, function(i,v) {//за всяки веведен линк...
var cont = $('#smiles').html();
$('#smiles').html(cont+"<img src='"+dir+v+"' onClick=\"addtags('',' "+icon[i]+" ','" + obj + "')\" /> ");//... ще се добавя нов img над textareata
});
}

function addlist(obj,ord){//функция за създаване на списък
var textarea = $('#'+obj);//взимаме id-то на textarea-та
var value = textarea.val();//стойноста на textarea-та
var listvalue = "init";
var thelist = "";
while ( (listvalue != "") && (listvalue != null) ) {//докато не натиснем "отказ" или оставим празно полето...
listvalue = prompt("Въведи предмет в списъка. Кликни на 'Отказ' или остави празно и натисни 'ОК', за да завършиш списъка", "");//... ще ни се появява input в който да напишем елемента от списъка
if ( (listvalue != "") && (listvalue != null) ) {
thelist += "[*]"+listvalue+"[/*]\n";
}
}
if ( thelist != "") {
thelist = "\n[list="+ord+"]\n"+thelist+"[/list]\n";
addtags('',thelist,obj);//добавяме списъка към textarea-та
}
}

function addtable(obj) {//функция за създаване на таблица
var textarea = $('#'+obj);//взимаме id-то на textarea-та
var value = textarea.val();//стойноста на textarea-та
var rows=$('#rows').val();//стойноста на input rows т.е колко реда да има таблицата
var cols=$('#cols').val();//стойноста на input cols т.е колко колони да има таблицата
var text = "\n[table]\n";
for(i=1;i<=rows;i++) {//за всяки ред добавяме код за редове
text +="[tr]\n";
for(k=1;k<=cols;k++){//за всяки колона добавяме код за колона
text +="[td]";
text +="[/td]\n";
}
text +="[/tr]\n";
}
text += "[/table]\n";
addtags('',text,obj);//добавяме таблицата към textarea-та
$('#rows').val("");
$('#cols').val("");//изчистваме 2-та input-а
}

function addimage(obj){//функция за добавяне на снимка към
textarea = document.getElementById(obj);
var url = prompt('Въведи линк към картинката','http://');//прозорче в което да въведеш линка към картинката
var scrollTop = textarea.scrollTop;
var scrollLeft = textarea.scrollLeft;
if (url != '' && url != null) {//ако сте въвели стойност в input полето ще продължи долния код

if (document.selection) {
textarea.focus();//фокусираме textareata
var sel = document.selection.createRange();//взема се стойноста на селектирания текст
sel.text = '[img]' + url + '[/img]';
}//ако сте селектирали текст(линк) [img] ще бъде добавено след него
else {
textarea.focus();//фокусираме textareata
var len = textarea.value.length;
var start = textarea.selectionStart;
var end = textarea.selectionEnd;
var sel = textarea.value.substring(start, end);
var rep = '[img]' + url + '[/img]';
textarea.value = textarea.value.substring(0,start) + rep + textarea.value.substring(end,len);
textarea.scrollTop = scrollTop;
textarea.scrollLeft = scrollLeft;
}//ако не сте ще селектирали текст(линк) [img] ще бъде добавено там където е курсора
}
}

function addurl(obj){//фунция за добавяне на линк
textarea = document.getElementById(obj);
var url = prompt('Въведете линк:','http://');//прозорче в което да въведеш линка
var scrollTop = textarea.scrollTop;
var scrollLeft = textarea.scrollLeft;
if (url != '' && url != null) {//ако сте въвели стойност в input полето ще продължи долния код
if (document.selection) {
textarea.focus();//фокусираме textareata
var sel = document.selection.createRange();//взема се стойноста на селектирания текст

if(sel.text==""){
var url2 = prompt('Име на линка','');//ако не сте селектирали текст който да играе ролята на име на линка то тогава ще ви излезе input поле където да въведете име
sel.text = '[url=' + url + ']' + url2 + '[/url]';
}
else {sel.text = '[url=' + url + ']' + sel.text + '[/url]';}
}
else {
var len = textarea.value.length;
var start = textarea.selectionStart;
var end = textarea.selectionEnd;
var sel = textarea.value.substring(start, end);
if(sel=="") {
var url2 = prompt('Име на линка','');
var rep = '[url=' + url + ']' + url2 + '[/url]';
}
else {var rep = '[url=' + url + ']' + sel + '[/url]';}
textarea.value = textarea.value.substring(0,start) + rep + textarea.value.substring(end,len);
textarea.scrollTop = scrollTop;
textarea.scrollLeft = scrollLeft;
}
}
}

function addimgurl(obj){//функция за добавяне на картинка с линк
textarea = document.getElementById(obj);
var url = prompt('Въведете линк:','http://');
var scrollTop = textarea.scrollTop;
var scrollLeft = textarea.scrollLeft;
if (url != '' && url != null) {
if (document.selection) {
textarea.focus();//фокусираме textareata
var sel = document.selection.createRange();//взема се стойноста на селектирания текст

if(sel.text==""){
var img = prompt('Линка към снимката','http://');
sel.text = '[img=' + url + ']' + img + '[/img]';
}
else {sel.text = '[img=' + url + ']' + sel.text + '[/img]';}
}
else {
var len = textarea.value.length;
var start = textarea.selectionStart;
var end = textarea.selectionEnd;
var sel = textarea.value.substring(start, end);
if(sel=="") {
var img = prompt('Линка към снимката','http://');
var rep = '[img=' + url + ']' + img + '[/img]';
}
else {var rep = '[img=' + url + ']' + sel + '[/img]';}
textarea.value = textarea.value.substring(0,start) + rep + textarea.value.substring(end,len);
textarea.scrollTop = scrollTop;
textarea.scrollLeft = scrollLeft;
}
}
}

function addtags(tag1,tag2,obj){//функция за добавяне на тагове
if(tag2=="[/color]" || tag2=="[/size]") {$("option[value='0']").attr('selected','selected');}//ако таг2 е [/color] или [/size] при изпълнение на функцията ще се селектне отново първия option
textarea = document.getElementById(obj);
//IE
if (document.selection) {
var sele = document.selection.createRange();//взема се стойноста на селектирания текст
sele.text = tag1 + sele.text + tag2;

}
else { //Mozilla
var len = textarea.value.length;
var start = textarea.selectionStart;
var end = textarea.selectionEnd;
var scrollTop = textarea.scrollTop;
var scrollLeft = textarea.scrollLeft;
var sel = textarea.value.substring(start, end);
var rep = tag1 + sel + tag2;
textarea.value = textarea.value.substring(0,start) + rep + textarea.value.substring(end,len);
textarea.scrollTop = scrollTop;
textarea.scrollLeft = scrollLeft;

}
}

bbcode.php (функцията в този файл преобразува bbcode-а в html)

<?php
function bbcode($text){
$text=preg_replace("/\[b\](.+?)\[\/b\]/s", '<b>$1</b>',$text); //заменяме bbcode текст с html-а <b>текст</b>... надолу се прави абсолютно същотото за всеки bbcode

$text=preg_replace("/\[i\](.+?)\[\/i\]/s", '<i>$1</i>',$text);

$text=preg_replace("/\[u\](.+?)\[\/u\]/s", '<u>$1</u>',$text);

$text=preg_replace("/\[l\](.+?)\[\/l\]/s", '<div style="text-align:left;">$1</div>',$text);

$text=preg_replace("/\[c\](.+?)\[\/c\]/s", '<div style="text-align:center;">$1</div>',$text);

$text=preg_replace("/\[r\](.+?)\[\/r\]/s", '<div style="text-align:right;">$1</div>',$text);

$text=preg_replace("/\[j\](.+?)\[\/j\]/s", '<div style="text-align:justify;">$1</div>',$text);

$text=preg_replace("/\[s\](.+?)\[\/s\]/s", '<strike>$1</strike>',$text);

$patterns = array(
'/\[url\=(.*?)\](.*?)\[\/url\]/is',
'/\[img\=(.*?)\](.*?)\[\/img\]/is',
'/\[url\](.*?)\[\/url\]/is',
'/\[img\](.*?)\[\/img\]/is',
'/((^http|https)(\S+))/is'
);
$replaces = array(
'<a href="$1" target="_blank">$2</a>',
'<a href="$1" target="_blank"><img src="$2" target="_blank"/></a>',
'<a href="$1" target="_blank">$1</a>',
'<img src="$1" target="_blank"/>',
'<a href="$1" target="_blank">$1</a>'
);

$text = preg_replace($patterns, $replaces, $text);

$text=preg_replace("/\[list=un\](.+?)\[\/list\]/s", '<ul>$1</ul>',$text);

$text=preg_replace("/\[list=or\](.+?)\[\/list\]/s", '<ol>$1</ol>',$text);

$text=preg_replace("/\[\*\](.+?)\[\/\*\]/s", '<li>$1</li>',$text);

$text=preg_replace("/\[quote\](.+?)\[\/quote\]/s", '<table cellspacing="1" width="100%" border="0"><tr><td>Цитат:</td></tr><tr><td width="100%" style="background-color:#C7C7C7;border:solid 1px black">$1</td></tr></table>',$text);

$text=preg_replace("/\[quote\=(.+?)](.+?)\[\/quote\]/s", '<table cellspacing="1" width="100%" border="0"><tr><td>$1 каза:</td></tr><tr><td width="100%" style="background-color:#C7C7C7;border:solid 1px black">$2</td></tr></table>',$text);

$text=preg_replace("/\[color\=(.+?)\](.+?)\[\/color\]/s", '<span style="color:$1">$2</span>',$text);

$text=preg_replace("/\[size\=(.+?)\](.+?)\[\/size\]/s", '<span style="font-size:$1px;">$2</span>',$text);

$text=preg_replace("/\[code\](.+?)\[\/code\]/s",'<table cellspacing="1" width="100%" border="0"><tr><td>Code:</td></tr><tr><td width="100%" style="background-color:#C7C7C7;border:solid 1px black">$1</td></tr></table>',$text);

$dir= "smiles";//папката в която са картинките
$smiles = array(':)',':(',':D');//текста който е бил в textarea-та
$smileslink = array('smile.gif','sad.gif','laught.gif');//въведи съответното име на всяка една картинка
$i = 0;
foreach($smiles AS $sm) {
$text = str_replace($sm,"<img src='$dir/$smileslink[$i]'/>",$text);
$i++;
}

$text = nl2br($text); //преобразува всички празни редове до <br />

$s1s = array('/\[table\]\<br \/\>/s','/\[td\]\<br \/\>/s','/\[\/td\]\<br \/\>/s','/\[tr\]\<br \/\>/s','/\[\/tr\]\<br \/\>/s','/\<li\>\<br \/\>/s','/\<\/li\>\<br \/\>/s','/\<ol\>\<br \/\>/s','/\<ul\>\<br \/\>/s');
$bez = array('[table]','[td]','[/td]','[tr]','[/tr]','<li>','</li>','<ol>','<ul>');
$text = preg_replace($s1s,$bez,$text);//махам <br /> от някои места за да се изместват нещата

$text=preg_replace("/\[table\](.+?)\[\/table\]/s", '<table border="1" max-width="600">$1</table>',$text);

$text=preg_replace("/\[tr\](.+?)\[\/tr\]/s", '<tr>$1</tr>',$text);

$text=preg_replace("/\[td\](.+?)\[\/td\]/s", '<td>$1</td>',$text);

return stripslashes($text); //връща променото съдържание
}
?>

примерна страница

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<title>bbcode editor+parser</title>
<script src="BBbutons.js" type="text/javascript"></script> //добавяме js файла
</head>
<body style="background: #ececec;">
<form method="post">
<script>bbcodetoolbar('area'); </script> //bbcodetoolbar(id-то на textarea-та в която ще се добавя)
<textarea id="area" name="txtarea" cols="130" rows="20"></textarea><br />
<input type="submit" name="submit" value="Прегледай"/>
</form>
<br />
<?php
if(isset($_POST['submit'])) {
include "bbcode.php";//добавяне на страницата с функцията за преобразуване в html
echo bbcode($_POST['txtarea']); //bbcode($text) преобразуване на текста в html
}
?>
</body>
</html>

TIP (за smiles): ако искате да добавите нова усмивка добавете в js и php документа линка(или по точно името) на картинката и текста който ще се добавя или съответно ще се търси и заменя в textarea-та

Всички файлове от урока(+картинките и 3 smiles)
Резервен линк 1
Резервен линк 2
Резервен линк 3

Демо
Резервно демо 1
Резервно демо 2

Дано да съм ви бил от полза :)

Урока е авторски и забранявам копирането му в други сайтове без разрешението ми!!!

formats

Подробна информация за дадено IP

Публикувана на 03.10.2011, от в Уроци.

Здравейте тъй като много хора питат във форума примерно как да разберат от кой град е дадено IP, реших да направя едно малко уроче с което може да видите hostname,държава,регион,град и ISP на дадено IP :)

Използвах whatismyipaddress.com за да взема информацията за IP-то

<?php
header( 'Content-Type:text/html; charset=UTF-8' );
function ipinfo($ip){ //създава функция която ще ни показва инфото за даденото IP
$get = file_get_contents("http://whatismyipaddress.com/ip/$ip");//вземаме source кода от whatismyipaddress
$a = explode("<th>Country:</th><td>",$get);
$b = explode(" <img",$a[1]);
$country = $b[0];//вземаме държавата от която ip-то
$c = explode("<th>State/Region:</th><td>",$get);
$d = explode("</td>",$c[1]);
$region = $d[0];//вземаме региона от който ip-то
$e = explode("<th>City:</th><td>",$get);
$f = explode("</td>",$e[1]);
$city = $f[0];//вземаме държавата от която ip-то
$g = explode("<th>ISP:</th><td>",$get);
$h = explode("</td>",$g[1]);
$isp = $h[0];//вземаме града от който ip-то
$i = explode("<th>Hostname:</th><td>",$get);
$j = explode("</td>",$i[1]);
$hostname = $j[0];//вземаме hostname на ip-то
$result = "<b>IP:</b> $ip <br /><b>Hostname:</b> $hostname <br /><b>Държава:</b> $country <br /><b>Регион:</b> $region <br /><b>Град:</b> $city <br /><b>ISP(Доставчик):</b> $isp <br />";//правим си променлива с цялата информация
return $result;//връщаме цялата информация
}

$ip=htmlspecialchars($_GET['ip']);//Вземаме ip-то от линка
if(!$ip OR !isset($ip)) {// ако няма query в линка или то е празно...
$ip=$_SERVER['REMOTE_ADDR'];//...ще вземе твоето IP...
echo ipinfo($ip);//...и ще изведе информацията за твоето IP(т.е на човека който е влязал в страницата)
}
else{//ако има query и има някакво IP...
echo ipinfo($ip);//ще изведе информацията за взетото с $_GET-IP
}
?>

Направил съм така, че ако се влезе в site.com/stranicata.php или site.com/stranicata.php?ip= (т.е без нищо за IP) ще изведе информация за IP-то на човека който е в страницата, а ако влезе вsite.com/stranicata.php?ip=91.139.246.220 ще изведе информацията за IP-то в query-то от линка :) .

Демо 1
Демо 2

Дано съм ви бил полезен :)

Урока е авторски и забранявам копирането му в други сайтове без разрешението ми!!!

© 2011-2012 Plamen Dobrev - Web Developer
%d bloggers like this: