Autor Zpráva
Beginner
Profil *
v tabuľke mám stĺpec URI do ktorého ukladám časť URL adresy(textovú hodnotu) podľa ktorej sa generuje link(každý článok musí mať unikátnu adresu), ako mám nastaviť stĺpec, tak aby nebolo možné uložiť viac krát rovnakú hodnotu pre dva rôzne články?
djlj
Profil
http://php.vrana.cz/automaticke-vytvoreni-pratelskeho-url.php
Kajman_
Profil *
Nastavte mu unikátní index.
Beginner
Profil *
djlj:

namespace Vecicky.Classes.Utils
{
public class UniqueURI
{
private string caption = null;

protected bool IsUnique(string URI)
{
using (SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["main"].Connectio nString))
{
connection.Open();
SqlCommand command = connection.CreateCommand();
command.CommandText = "SELECT URI FROM PageItems WHERE URI = @URI";
command.Parameters.AddWithValue("@URI", URI);
return (command.ExecuteScalar() == null);
}
}

public string Caption
{
get { return caption; }
set { caption = value; }
}

public string Generate()
{
int index = 1;
string uri = caption.Replace(" ", "-");
while (!IsUnique(uri))
{
uri = String.Format("{0}-{1}", caption, index);
index++;
}
return uri;
}
}
}

Ďakujem inšpiroval som sa tým PHP zdrojákom a napísal som si vlastnú C# triedu, na generovanie URI, len má jednu nevýhodu: nepodporuje nadpisy s diakritikou. Neviete o nejakej funkcii na odstránenie dĺžňov a mekčeňov?
Beginner
Profil *
Tu je novšia verzia (odstraňuje diakritiku):

using System;

using System.Data;
using System.Data.SqlClient;
using System.Text;
using System.Configuration;
using System.Globalization;

namespace Classes.Utils
{
public static class StringUtils
{
public static string RemoveDiacritics(string text)
{
text = text.Normalize(NormalizationForm.FormD);
StringBuilder result = new StringBuilder();
foreach (char character in text)
if (CharUnicodeInfo.GetUnicodeCategory(character) != UnicodeCategory.NonSpacingMark)
result.Append(character);
return result.ToString();
}
}

public class UniqueURI
{
private string caption = null;
private string sign = "-id";

protected virtual int LastIndex(string uri)
{
StringBuilder number = new StringBuilder();
uri = uri.Remove(0, uri.LastIndexOf(sign) + sign.Length);
foreach (char character in uri)
if (char.IsDigit(character)) number.Append(character);
else return -1;
return Convert.ToInt32(number.ToString());
}

protected virtual bool IsUnique(string uri)
{
using (SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["main"].Connectio nString))
{
connection.Open();
SqlCommand command = connection.CreateCommand();
command.CommandText = "SELECT URI FROM PageItems WHERE URI = @URI";
command.Parameters.AddWithValue("@URI", uri);
return (command.ExecuteScalar() == null);
}
}

public string Caption
{
get { return caption; }
set { caption = value; }
}

public string Sign
{
get { return sign; }
set { sign = (value.StartsWith("-")) ? value : "-" + value; }
}

public string Generate()
{
int index = 1;
string uri = Utils.StringUtils.RemoveDiacritics(caption.Replace(" ", "-").ToLower());
while (!IsUnique(uri))
{
int last = LastIndex(uri);
if (last == -1) uri += sign + index;
else uri = uri.Remove(uri.LastIndexOf(sign) + sign.Length) + index;
index++;
}
return uri;
}
}
}
Toto téma je uzamčeno. Odpověď nelze zaslat.

0