Новости

ЦСС едитор стила се сада може користити онлајн

Напрвљен је један врло интересантан алат: ЦСС едитор стила. Овај алат могу да користе ЦСС почетници да виде како одређени ЦСС елементи утичу на изглед странице, као и већ извештани ЦСС мајстори који не желе да пишу из главе већ желе да користе овај алат који може да им омогући учитавање ЦСС стила из другог извора.

Алат за пресловљавање је заживео!

Пресловљавање из ћирилице у латиницу и из латинице у ћирилицу

Често ми је потребан неки такав алат који би могао да користим, али не мегу да се поуздам у исте такве алате на интернету и зато сам одлучио да направим свој и поставим га овде на овоме сајту.

Кликните на следећи линк да би сте отворили страницу са алатом: пресловљавање.

Инсталација "SSL"-а на "IIS" 6 и Виндовс серверу 2003 за српски домен

Проблем: проблем овде је што приликом прављења захтева за издавање сертификата на ИИС-у не постоји (исправна) шифра земље Србија која је однедавно неопходна. Да би се ово превазишло потребно је урадити следеће:

Креирати захтев помоћу онепссл алата, прво овде https://www.digicert.com/easy-csr/openssl.htm креирати командну линију за опенссл алат. Затим скинути опенссл алат (за Виндовс овде; http://gnuwin32.sourceforge.net/packages/openssl.htm) и инсталирати га на сервер. Покренути следећу команду да се зада путања и системска варијабла до цонфигурационе датотеке: "set OPENSSL_CONF=C:\Programme\GnuWin32\share\openssl.cnf".

Назад на дигицерт-ов вебсајт, унесите податке потребне да се креира захтев и притисните дугме генерате. Ново формирану команду са десне стране копирајте и унесите у командну линију на серверу. У фолдеру где сте извршили команду алат ће да формира ".csr" и ".key"  датотеке. ".csr" датотеку поднесите као захтев за сертификат. Када сертификат буде припремљен унесите (импортујте) га Виндовс фолдер са сертификатима. И одмах га и извезите али како је приказано на овом сајту: https://www.markbrilman.nl/2012/07/openssl-error-no-certificate-matches-private-key-when-creating-pfx/, Значи треба да се извезе у бејз 64 формату. Тако извезени сертификат је потребно комбиновати са приватним кључем помоћу ове команде: "openssl pkcs12 -export -out www.pfx -inkey www.key -in www.cer".

Затим обрисати импортовани сертификат који је у Виндовс фолдеру са сертификатима и импортовати овај који је "pfx" формату.

Упутство за коришћење веб сајта (још у изради)

1. Структура сајта

Овај веб сајт је сачињен од неколико главних делова, а то су (побројано од врха до дна):

  1. заглавље
  2. навигација
  3. главни садржај
  4. подножје

1.1. Заглавље

Заглавље садржи техничке ствари потребне за исправан рад сајта (наслов, језик, спољне ресурсе итд.). Заглавље се не види физички на страници, већ се налази у позадини, у коду. Поједине елементе заглавља је могуће мењати у подешавањима сајта о којима ће бити касније речи у посебној целини.

1.2. Навигација

Навигација садржи и приказује интерне везе ка страницама на веб сајту, избор језика и функцију претраге. Везе је могуће уклањати / додавати у подешавањима, такође је могуће мењати и њихов назив. Међутим, сајт интерно је сачињен од следећих веза (називи су на Енглеском језику, али се у подешавањима може доделити било који други назив и језик):

  1. [без назива] - то је насловна страница сајта
  2. about
  3. blog - посебна страница која учитава и приказује новости
  4. contact - страница која служи за слање порука електронском поштом
  5. downloads
  6. services, service1-9
  7. products, product1-9
  8. editor - ово је страница која служи за измену садржаја сајта као и за подешавања
  9. заставице за избор језика - уколико је подешен двојезични садржај
  10. search - резервисана страница за претрагу садржаја на сајту

Странице 1, 2, 5, 6 и 7 могу да имају било какав садржај и назив, док све странице могу да имају другачије називе од приказаних овде. На пример страница blog може да се подеси да се у претраживачу види као prodavnica. Значи на располагању су 12 страница које могу да имају различит тематски садржај, страница за новости, слање порука, 2 језика, страница за измену садржаја и претрагу.

1.3. Главни садржај

То је у суштини и највећи део површине омогућен за приказ веб сајта. Он се може прилагодити и мењати помоћу странице editor о којој ће бити речи касније. Свака страница има 3 додатна обележја: статус, датум и значке. Статус може да буде двојак: у припреми и објављено. Ако је страница у припреми неће бити видљива на веб сајту. Ако је то чланак у делу новости онда тај чланак неће бити видљив, а ако је у питању регуларна страница онда линк ка њој неће бити видљив. Датум може да се користи да се постави датум креирања или објаве. Значке могу да користе да се групише и категорише садржај сајта.

1.4. Едитор страница

Едитор страница је страница која служи за измену параметара сајта и унос / измену садржаја сајта. Едитор страница се налази као последња у линији менија после свих ставки, а пре поља за претрагу.

Едитор има 3 језичка: програмски код, ХТМЛ дизајн и карусел.

1.4.1. Програмски код језичак

У заглављу овога језичка налазе се падајућа листа са свим страницама које се могу мењати (Напомена: сајт има много више страница него што се овде може видети, разлог за то је сто неке странице не утичу на садржај сајта и зато су изостављене из листе). 

Приказује како страница изгледа са свим посгојећим кодом. 

1.5. Специјалне странице

Специјалне странице су странице чији садржај је посебан у смислу што садржи подешавања и подесиве параметре за фунционалност самог сајта.

1.5.1. language files/message_lang.php

Ова страница је специфична за сваки језик који се користи на сајту. Сајт подржава 2 језика. 

1.5.2. config/routes.php

Ова страница служи да се са њом подесе путање које воде до појединих страница на сајту. Путање које видите у адреси вашег претраживача се помоћу ове странице преусмеравају на поједине функције у оквиру сајта. 

Напомена: измена ове странце треба да буде обављена са посебном пажњом и разумевањем јер свака погрешна измена може да проузрокује сајт да не буде више функционалан. Нарано, приликом сваке измене и чувања те измене, први се копија претходног стања које се чува у послебно директоријуму и никада се не брише. Тако сачувану датотеку је могуће лако вратити поново у функцију и са тим оспособити сајт.

2. Како да?

Прве две тачке које следе су једине две које се морају обавити директном изменом на самим фајловима, све остаје измене је могуће обавити путем странице за администрирање сајта: Едитор.

2.1. Системске измене

2.1.1. Копирам сајт на нови сервер и покренем га?

Ископирати фолдер са сајтом у фолдер на серверу, отворити у текст едитору датотеку: "..\application\config\settings.php" пронаћи следећу линију: $config['base_url'] = ($_SERVER['HTTP_HOST'] === 'localhost' ? $protocol.'localhost/ааа' : $protocol.'www.ааа.co.rs') ; и променути "www.ааа.co.rs" у нову адресу домена, затим отворити сајт у омиљеном претраживачу.

2.1.2. Отворим страницу за измену садржаја на овом сајту?

За то Вам је потребна шифра коју куцате у поље претрага. Шифра се налази у датотеци: "/programiranje.co.rs/application/config/constants.php" на линији команде: defined('admin_access_code') OR define('admin_access_code', "Ваша.шифра"); //. Пожељно је да промените шифру и сачивате је у овој датотеци на серверу.  Овако унета шифра у поље претрага отвара страницу Едитор коју ћете користите за промену параметара странице и унос/измену садржаја сајта. Напомена: ако користите претрагу после уноса ове шифре страница Едитор ће опет нестати.

2.2. Подешавање изгледа сајта (теме)

2.2.1. Избор светле или тамне теме сајта

У Едитору отворите "config/settings.php" и нађите варијаблу $config["theme"] = "dark"; те јој доделите вредности "dark" или "light". Напомена: могуће је креирање и нових тема са додавањем (или изменом) варијабла $config["dark"], $config["light"] и других.

2.3. Промена назива странице

Сајт садржи неколико странице чији називи могу да се мењају.

„TADOConnection“ – Исправан начин да се користи „LoginPrompt := true“

Нисам до сада никако разумео шта "LoginPrompt := true" уопште ради. Али сада знам да је исправан начин да се користи следећи:

procedure TfrmMain.FormShow(Sender: TObject);
var
  i: integer;
begin
  con1.Provider := 'SQLOLEDB.1';
  con1.Properties['Application Name'].Value := Application.Title;
  with TIniFile.Create(ExtractFileDir(ParamStr(0)) + '\setup.ini') do
  begin
    con1.Properties['Initial Catalog'].Value := ReadString('database', 'Initial Catalog', '');
    con1.Properties['Data Source'].Value := ReadString('database', 'Data Source', '');
    if ReadBool('database', 'Integrated Security', false ) then
    begin
      con1.Properties['Integrated Security'].Value := 'SSPI';
      con1.Properties['Persist Security Info'].Value := 'False';
      con1.LoginPrompt := False;
    end
    else
    begin
      con1.Properties['Persist Security Info'].Value := 'True';
      con1.LoginPrompt := true;
    end;
  end;
end;

procedure TfrmMain.con1Login(Sender: TObject; Username, Password: string);
begin
  con1.Properties['User ID'].Value := Username;
  con1.Properties['Password'].Value := Password;
end;
  

Овај код чита нека обележја потребна за објекат конекције из ИНИ датотеке. Онда, на основу вредности "Integrated Security" обележја које налази у фајлу одлучује да ли ће да користи уграђену безбедност (виндовс) или сикјуел сервер безбедност. Ако користи сикјуел сервер беѕбедност онда ће ОнЛогон догађај бити позван након позива фукције Опен над конекцијом. Али мало пре тога ће корисник добити на екрану образац за уност корисничког имена и лозинке. И онда можете поставити те вредности у догађају.

Важно је да се користи колекција обележја за додељивање ових вредности а не замена стрингова у стринг конекције, јер тако неће хтети да ради.

ScriptTable_TF

Ова функција ће да направи сцрипт за копирање табеле.

ALTER FUNCTION [dbo].[ScriptTable_TF](
    @TABLE_NAME nvarchar(127),
	@ScriptForDb nvarchar(127))
returns @t table(column_ordinal int, sql nvarchar(4000), cname nvarchar(127))
as
begin

insert into @t(column_ordinal, sql, cname) values(0, 'SET XACT_ABORT ON;  BEGIN TRAN  BEGIN TRY', '')

;WITH A AS
(
SELECT  
        c.is_identity_column
	  , c.column_ordinal
	  , c.name
      , c.is_nullable
	  , c.system_type_name
	  , c.collation_name
	  , c.is_xml_document
	  , c.is_part_of_unique_key
	  , c.is_computed_column
	  , cc.definition computed_definition
	  , dc.definition default_constraint
	  , (SELECT  sc.name AS ColumnName
		FROM    sys.indexes AS i INNER JOIN 
				sys.index_columns AS ic ON  i.OBJECT_ID = ic.OBJECT_ID
										AND i.index_id = ic.index_id JOIN
	            sys.columns sc on ic.column_id = sc.column_id and ic.object_id = sc.object_id
		WHERE   i.is_primary_key = 1
			AND OBJECT_NAME(I.object_id) = @TABLE_NAME
			AND sc.name collate Latin1_General_CI_AS  = c.name collate Latin1_General_CI_AS 
			) pk
FROM sys.dm_exec_describe_first_result_set('select * from [dbo].[' + @TABLE_NAME +']', NULL, 0) c left JOIN
    sys.computed_columns cc on OBJECT_NAME(cc.object_id) = @TABLE_NAME and cc.name collate Latin1_General_CI_AS = c.name collate Latin1_General_CI_AS left join
	sys.default_constraints dc on OBJECT_NAME(parent_object_id) = @TABLE_NAME and c.name = COL_NAME(parent_object_id, parent_column_id)
)
insert into @t(column_ordinal, sql, cname)
SELECT TOP 100 PERCENT column_ordinal, 
CASE WHEN column_ordinal = 1 THEN 
	'CREATE TABLE "' + @ScriptForDb + '".dbo."' + @TABLE_NAME + '" ("' + NAME + '"'  
ELSE 
	'ALTER TABLE "' + @ScriptForDb + '".dbo."' + @TABLE_NAME + '" ADD "' + NAME + '"'
END +
CASE WHEN is_computed_column = 1 THEN 
	' AS ' + computed_definition COLLATE Latin1_General_CI_AS
ELSE 
	' ' + system_type_name + 
	CASE WHEN collation_name IS NOT NULL THEN 
		' COLLATE ' + collation_name 
	ELSE
		''
	END +
	CASE WHEN is_nullable = 0 THEN 
		' NOT' 
	ELSE
		''
	END + 
	' NULL'+
	CASE WHEN is_identity_column = 1 THEN
		' IDENTITY(1,1)'
	ELSE
		''
	END 
END +
CASE WHEN column_ordinal = 1 THEN 
		')' 
ELSE 
		''
END +
CASE WHEN pk IS NOT NULL THEN 
		';ALTER TABLE "' + @ScriptForDb + '"."dbo"."' + @TABLE_NAME + '" ADD CONSTRAINT PK_' + DBO.StripOut_FN(@TABLE_NAME, '%[^A-Za-z0-9_]%') + '_' + DBO.StripOut_FN(NAME, '%[^A-Za-z0-9_]%') + ' PRIMARY KEY NONCLUSTERED ("' + NAME + '") '
     WHEN default_constraint IS NOT NULL THEN 
		';ALTER TABLE "' + @ScriptForDb + '"."dbo"."' + @TABLE_NAME + '" ADD CONSTRAINT DF_' + DBO.StripOut_FN(@TABLE_NAME, '%[^A-Za-z0-9_]%') + '_' + DBO.StripOut_FN(NAME, '%[^A-Za-z0-9_]%') + ' DEFAULT ' + default_constraint + ' FOR "' + NAME + '"'
	ELSE
		''
END
SQL, NAME
FROM A
ORDER BY column_ordinal

insert into @t(column_ordinal, sql, cname) values((select count(*) from @t) + 1, 'END TRY BEGIN CATCH IF (XACT_STATE()) = -1 BEGIN ROLLBACK TRAN; THROW; END END CATCH; IF (XACT_STATE()) = 1  COMMIT TRAN;', '')

return 
end
  

Тражење текста у функцијама и ускладиштеним процедурама на сикјул серверу

Била ми је потребна једна таква опција – да могу да нађем текст у функцијама, тригериме и ускладиштеним процедурама на сикјул серверу.

CREATE FUNCTION [dbo].[Find_Text_In_SP]
(
  @String1ToSearch nvarchar(100)
)
returns table 

AS
   
  RETURN
  (
     SELECT Distinct SO.Name, so.type
     FROM sysobjects SO (NOLOCK)
      INNER JOIN syscomments SC (NOLOCK) on SO.Id = SC.ID
      AND NOT(SO.Name LIKE N'MSmerge%')
      AND NOT(SO.name LIKE N'dt_%') 
      AND (not (SO.name in (N'GrantExectoAllProcedures_sp')))
      AND (left(SO.name, 6) <> N'sp_cft')
      AND (left(SO.name, 4) <> N'sel_')
      AND (left(SO.name, 6) <> N'sp_sel')
      AND (left(SO.name, 6) <> N'sp_upd')
      AND (left(SO.name, 6) <> N'sp_ins')
      AND SO.Type IN (N'P',N'FN',N'IF',N'TF',N'TR',N'D')
    WHERE (SC.Text LIKE N'%' + @String1ToSearch+ N'%')
      and NOT(SC.Text LIKE N'%' + @String1ToSearch+ N'-done!%')
  )