Vad är en slug?

En slug är en del av webbadressen när du får tillgång till en resurs. Säg att du har en URL, som den nedan, som visar alla bilar i ditt system:

http://localhost/cars

När du vill hänvisa till en viss bil i ditt system skulle du ange följande URL:

http://localhost/cars/audi-a6/

Märk hur URL:n fortfarande är mycket logisk och mycket SEO-vänlig. När det gäller användningen av sluggen är det upp till dig att bestämma. Strängen audi-a6 ovan kan vara en unik identifierare för en bil i ditt system – låt oss säga att du har en relationsdatabas med följande fält:

idcar_namecar_brandcar_unique_identifier

Fältet car_unique_identifier skulle då användas för att lagra värdena som visas i sluggen; i exemplet som jag har angett ovan med en Audi A6-bil är det här som din sträng audi-a6 skulle ligga.

Du kan använda det på andra sätt också – till exempel om du har en posts controller som fungerar som en blogg. Titeln för en sida kan vara en slug för den, om den är URL-kodad. För vår artikel som heter ”Best ways to make SEO better” kan du ange följande URL:

http://localhosts/posts/best-ways-to-make-seo-better

Du skulle sedan köra url_decode() på sluggen och du skulle få strängen best ways to make seo better, som du kan använda för att hitta ett inlägg via dess titel.

Det behöver inte stanna vid det – du kan bestämma dig för att ha flera slugs för att representera något – låt oss ta en titt på hur BBC gör det. Jag har tagit en slumpmässig artikel från idag som har följande URL:

http://www.bbc.co.uk/news/world-africa-24506006

Detta länkar till en artikel som heter: African Union urges ICC to drop cases against leaders. Det sätt som BBC gör det på är att de använder den sista delen av sluggen world-africa-24506006, som är 24506006, för att identifiera en unik post i deras system. De använder sedan troligen world-africa för att beteckna den kategori som ett inlägg tillhör (även om detta kanske bara är ett antagande är det ändå en kvalificerad gissning).

Till sist, låt oss föreställa oss följande DB-tabell, för forskningsartiklar.

idcategorytitle

Du kan ha ett exempel som fungerar som det nedan.

http://localhost/papers

Denna URL representerar alla forskningsrapporter som för närvarande finns i systemet. Du skulle då kunna få tillgång till alla forskningsartiklar om fysik via följande slug:

http://localhost/papers/physics

Vår slug är fysik, och vårt databasval ser för närvarande ut ungefär så här:

SELECT *FROM papersWHERE LOWER(papers.category) = 'physics'

Du kan då exponera följande URL:

http://localhost/papers/physics/gravitation

Nu är vår slug sammansatt av fysik och gravitation. Vår fråga bakom kulisserna kan se ut ungefär så här:

SELECT *FROM papersWHERE LOWER(papers.category) = 'physics'AND LOWER(papers.title) = 'gravitation'

Detta gör det möjligt för oss att unikt identifiera en post i vårt system.

Så vi har använt slugs upprepade gånger för att filtrera ut vår information. I exemplet, när vi körde URL:n utan några sniglar:

http://localhost/papers

Vi ville lista alla tillgängliga forskningsartiklar. När vi körde URL:n med sluggen physics:

http://localhost/papers/physics

Vi ville lista alla forskningsartiklar om fysik, och på så sätt begränsa våra resultat. Slutligen, när vi tillhandahöll två slugs kunde vi unikt identifiera en post i vårt system.

http://localhost/papers/physics/gravitation

Kan vi ha modellerat detta på ett annat sätt? Självklart! Beroende på vårt systems krav kan vi normalisera och denormalisera våra relationstabeller. Vi kunde ha haft ett permalink-system, så att vår tabell med inlägg såg ut så här:

 id title permalink

Vi kunde då ha haft följande post:

 | 20013 | Gravitation | physics-gravitation-breakthrough |

Då URL:

 http://localhost/papers/physics-gravitation-breakthrough

I exemplet ovan gör sluggen physics-gravitation-breakthrough det möjligt för oss att identifiera ett inlägg på ett entydigt sätt via:

 SELECT * FROM papers WHERE papers.permalink = physics-gravitation-breakthrough