Locations Plugin ๐ŸŒ

์„ค์ • location users map limit์„ ํ™•์ธํ•˜์„ธ์š”. ์ด ๊ฐ’์ด ์œ„์น˜๋ฅผ ์ถ”๊ฐ€ํ•œ ์‚ฌ์šฉ์ž ์ˆ˜๋ณด๋‹ค ์ž‘์œผ๋ฉด, ํ•ด๋‹น ์ œํ•œ ์ˆ˜๋ฅผ ์ดˆ๊ณผํ•˜๋Š” ์‚ฌ์šฉ์ž๋Š” ์ง€๋„์— ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

5๊ฐœ์˜ ์ข‹์•„์š”

๊ทธ๊ฒŒ ์ „๋ถ€์˜€์–ด์š”. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. :smile:

2๊ฐœ์˜ ์ข‹์•„์š”

์ผ๋ถ€ ์‚ฌ์šฉ์ž๋Š” ๊ธฐ๋ณธ ์ œ๊ณต์ž(nominatim)์—์„œ ์†๋„ ์ œํ•œ(rate limit)์— ๊ฑธ๋ ค ๋‹ค์‹œ ์‹œ๋„ํ•˜๊ธฐ ์ „์— 1๋ถ„๊ฐ„ ๋Œ€๊ธฐํ•ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ๊ฒช๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์ƒํ•˜๊ฒŒ๋„, ์ €๋Š” ์–ด๋–ค ํ˜•ํƒœ์˜ ์ œํ•œ๋„ ๊ฒฝํ—˜ํ•˜์ง€ ๋ชปํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ : The location field in profile is kind of broken - Forum Feedback - Unicyclist.com

  1. ์™œ ์ผ๋ถ€ ์‚ฌ์šฉ์ž๋Š” ์ œํ•œ์„ ๊ฒช๋Š” ๋ฐ˜๋ฉด ์ €๋Š” ๊ทธ๋ ‡์ง€ ์•Š์€์ง€ ์ด์œ ๊ฐ€ ์žˆ์„๊นŒ์š”? ์ €๋Š” ๋น ๋ฅด๊ฒŒ ๊ธด ์œ„์น˜ ์ด๋ฆ„์„ ์ž…๋ ฅํ•ด ๋ณด์•˜์Šต๋‹ˆ๋‹ค.
  2. location_geocoding_provider ์„ค์ •์˜ ๋‘ ๋ฒˆ์งธ ์„ ํƒ์ง€๋Š” ๋ฌด์—‡์ผ๊นŒ์š”? (๋ฌด๋ฃŒ ์‚ฌ์šฉ ๊ธฐ์ค€)
  3. location_geocoding_debounce ์„ค์ •์€ ๋ฌด์—‡์ธ๊ฐ€์š”?

nominatim์˜ ์‚ฌ์šฉ ์ •์ฑ…์—์„œ "์ž๋™์™„์„ฑ ๊ฒ€์ƒ‰ ์ด๋Š” ์•„์ง Nominatim์—์„œ ์ง€์›๋˜์ง€ ์•Š์œผ๋ฉฐ, ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋Ÿฌํ•œ ์„œ๋น„์Šค๋ฅผ ๊ตฌํ˜„ํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค."๋ผ๊ณ  ๋ช…์‹œ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ƒˆ ์ฃผ์ œ ์ƒ์„ฑ ์‹œ ์œ„์น˜ ๋ฒ„ํŠผ์—๋Š” ์ž๋™์™„์„ฑ ๊ธฐ๋Šฅ์ด ์—†์ง€๋งŒ, ์‚ฌ์šฉ์ž ์ •์˜ ํ•„๋“œ์—๋Š” ์ž๋™์™„์„ฑ ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค:

image

image

chrome_tOtNSZ2dXy

  1. ์ด๊ฒƒ์ด ๊ธˆ์ง€๋œ ์‚ฌ์šฉ ์‚ฌ๋ก€์ธ๊ฐ€์š”? :thinking:

๋„ค, ์•„๋‹ˆ์š”. ๋Œ€๋ถ€๋ถ„ ์•„๋‹ˆ์—์š”. ์œ„์น˜๊ฐ€ ์‚ฌ์šฉ์ž์˜ ์กฐ์ž‘ ์—†์ด ์ž๋™์œผ๋กœ ์ˆ˜์ง‘๋˜๊ณ , ํ•ด๋‹น ์‚ฌ์ดํŠธ๊ฐ€ ๊ฐœ์ธ์ด ์•„๋‹Œ ํšŒ์‚ฌ๋‚˜ ์ปค๋ฎค๋‹ˆํ‹ฐ์— ์˜ํ•ด ์šด์˜๋˜๋ฉฐ, ๊ทธ ์ •๋ณด๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ๋ผ๋ฉด GDPR(์ผ๋ฐ˜ ๋ฐ์ดํ„ฐ ๋ณดํ˜ธ ๊ทœ์ •)์— ์œ„๋ฐฐ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒโ€ฆ ์ง€๋ฆฌ์  ์œ„์น˜ ์ถ”์ ์€ ์ •ํ™•๋„๊ฐ€ ๋งค์šฐ ๋‚ฎ์Šต๋‹ˆ๋‹ค. ํ”„๋ž‘์Šค์—์„œ๋Š” ์–ด๋–ป๊ฒŒ ๋˜๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ, ํ•€๋ž€๋“œ์—์„œ๋Š” ๋ชจ๋“  ํ†ต์‹ ์‚ฌ๊ฐ€ ์ „๊ตญ ๋‹จ์œ„๋กœ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ œ IP๊ฐ€ ๋ฐ”๋€” ๋•Œ๋งˆ๋‹ค ์œ„์น˜๋„ ๋ฐ”๋€Œ๊ณ , ๋งค๋ฒˆ ์ž˜๋ชป๋œ ๋„์‹œ๋ฅผ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค.

๋˜ํ•œ IP ์ฃผ์†Œ๋Š” ๊ฐœ์ธ ์ •๋ณด๋กœ ๊ฐ„์ฃผ๋˜์ง€ ์•Š์œผ๋ฉฐ, ๋‹จ์ผ ๊ฐœ์ธ์„ ์‹๋ณ„ํ•  ์ˆ˜ ์—†๋Š” ์‚ฌ์‹ค์ƒ ๊ณต๊ฐœ ๋ฐ์ดํ„ฐ๋กœ ์ทจ๊ธ‰๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ, ์‚ฌ์šฉ์ž๊ฐ€ ์ž์‹ ์˜ ์œ„์น˜๋ฅผ ํ‘œ์‹œํ•˜๊ณ  ์‹ถ์–ด ํ•˜๋ฏ€๋กœ ์ง€๋ฆฌ์  ์œ„์น˜ ์ถ”์ ์€ ๊ธˆ์ง€, ๊ธˆ์ง€๋˜๊ฑฐ๋‚˜ ๋ถˆ๋ฒ•์ ์ธ ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  IP ์ฃผ์†Œ๋ฅผ ์œ„์น˜ ์ •๋ณด์˜ ์ถœ์ฒ˜๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๊ฒฐ์ฝ” ๋ถˆ๋ฒ•์ ์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‹ค๋งŒ, ๋” ๋งŽ์€ ๋„๋•์  ๋ฌธ์ œ๊ฐ€ ์žˆ์„ ์ˆ˜๋Š” ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ทธ๊ฒƒ์€ ํฌ๋Ÿผ์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

์‚ฌ์‹ค ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์ž˜๋ชป ์ดํ•ดํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด ํ† ํ”ฝ ์ „์ฒด๋ฅผ ์ฝ์–ด๋ด์•ผ๊ฒ ์–ด์š”. ๋‹ต๋ณ€ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. :slight_smile:

Nominatim์€ ํ…Œ์ŠคํŠธ ๋ชฉ์ ์œผ๋กœ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ๋Š” ๋‹ค์Œ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

2๊ฐœ์˜ ์ข‹์•„์š”

์ง€๋‚œ๋‹ฌ์— ์˜ฌ๋ฆฐ ๋‚ด์šฉ์„ ๋‹ค์‹œ ์˜ฌ๋ ค๋ด…๋‹ˆ๋‹ค. ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ๋‹ต๊ธ€ ์•Œ๋ฆผ์„ somehow ๋†“์ณ๋ฒ„๋ ธ๋„ค์š” :man_facepalming:

๋” ํฐ ํ…์ŠคํŠธ๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๋‹ค๋ฅธ ์‚ฌ์ดํŠธ์—์„œ๋Š” Leaflet v1.5.1์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

Locations ํ”Œ๋Ÿฌ๊ทธ์ธ์ด 1.3.4์—์„œ 1.7.1๋กœ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์œผ๋‹ˆ, ๋ฒ„์ „ ๋ฌธ์ œ๋Š” ์•„๋‹Œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์‹œ ํ•œ๋ฒˆ ๋ง์”€๋“œ๋ฆฌ์ž๋ฉด, ์ €ํฌ Locations ์ง€๋„์˜ ํ…์ŠคํŠธ๊ฐ€ ๋„ˆ๋ฌด ์ž‘์•„ ์ฝ์„ ์ˆ˜ ์—†๋Š” ์ƒํƒœ์ž…๋‹ˆ๋‹ค.

์Šคํฌ๋ฆฐ์ƒท๊ณผ ํ•จ๊ป˜ ์˜ˆ์‹œ๋Š” ์—ฌ๊ธฐ ์žˆ์Šต๋‹ˆ๋‹ค: Locations Plugin ๐ŸŒ - #736 by Richie

Robert @merefield ๋‹˜, ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ํ…์ŠคํŠธ๊ฐ€ ๋” ํฐ ๋‹ค๋ฅธ ์‚ฌ์ดํŠธ์˜ ์†Œ์Šค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ์‚ฌ์ดํŠธ๋Š” ๋™์ผํ•œ ๋ฒ ์ด์Šค๋งต์„ ์‚ฌ์šฉํ•˜์ฃ .

์ฐจ์ด๋Š” ์ถ”๊ฐ€ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์ „๋‹ฌ๋˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค:

tileSize: 512

์ด๊ฒƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋งฅ๋ฝ์—์„œ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค:



// Attribution
var mbAttr = 'Map &copy; <a href="https://www.openstreetmap.org/">OpenStreetMap</a>, Imagery ยฉ <a href="https://www.mapbox.com/">Mapbox</a>, Content &copy; <a href="https://GreyArro.ws/">Grey Arrows Drone Club</a>',
	mbUrl = 'https://api.mapbox.com/styles/v1/mapbox/{id}/tiles/{z}/{x}/{y}?access_token=<%=Variabs.GlobalVariables.strOpenStreetMapKey%>',
	mbMaxZoom = '20'
;


// Basemaps
var
	// Full list: https://gis.stackexchange.com/a/244797/145060
	// Full list: https://docs.mapbox.com/help/troubleshooting/migrate-legacy-static-tiles-api/#which-classic-styles-are-being-deprecated
	// Full list: https://docs.mapbox.com/api/maps/#mapbox-styles
	dark = L.tileLayer(mbUrl, { id: 'dark-v10', maxZoom: mbMaxZoom, attribution: mbAttr, tileSize: 512, zoomOffset: -1 }),
	road = L.tileLayer(mbUrl, { id: 'outdoors-v11', maxZoom: mbMaxZoom, attribution: mbAttr, tileSize: 512, zoomOffset: -1 }),
	satellite = L.tileLayer(mbUrl, { id: 'satellite-v9', maxZoom: mbMaxZoom, attribution: mbAttr, tileSize: 512, zoomOffset: -1 }),
	hybrid = L.tileLayer(mbUrl, { id: 'satellite-streets-v11', maxZoom: mbMaxZoom, attribution: mbAttr, tileSize: 512, zoomOffset: -1 })
;

๋”ฐ๋ผ์„œ, ๊ธฐ๋Šฅ ์š”์ฒญ์„ ํ•˜๋‚˜ ๋“œ๋ ค์•ผ ํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค :slight_smile:

ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์ •์— tileSize๋ฅผ ์ถ”๊ฐ€ํ•ด ์ฃผ์‹ค ์ˆ˜ ์žˆ์„๊นŒ์š”?

ํ˜น์‹œ Map tile layer uri ์„ค์ •์—์„œ ์›ํ•˜๋Š” tileSize๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์„๊นŒ์š”? :thinking:

์•ˆ๋…•ํ•˜์„ธ์š”,

composer์˜ ์œ„์น˜ ๋ฒ„ํŠผ์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
Discourse ๋ฒ„์ „ a6abf8d07a

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค :slightly_smiling_face:

1๊ฐœ์˜ ์ข‹์•„์š”

@Don ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์žฌํ˜„์€ ๊ฐ€๋Šฅํ–ˆ์ง€๋งŒ, ์„œ๋น„์Šค๊ฐ€ ์ค‘๋‹จ๋˜์ง€๋Š” ์•Š๋Š” ๊ฒƒ ๊ฐ™๋„ค์š”. ๊ณง ํ™•์ธํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

2๊ฐœ์˜ ์ข‹์•„์š”

์ด๋Š” ์ฝ”์–ด์—์„œ ํ•ด๋‹น ์ปค๋ฐ‹์œผ๋กœ ์ธํ•œ ํ˜ธํ™˜์„ฑ ๊นจ์ง(breaking change) ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค: FIX: Use CSS transition to make room for composer (#16750) ยท discourse/discourse@9ea8a4a (github.com)

L&F(๋ ˆ์ด์•„์›ƒ ๋ฐ ํ˜•์‹)์„ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•œ ๋ช‡ ๊ฐ€์ง€ ๊ฒฝ๋ฏธํ•œ ์„œ์‹ ์กฐ์ •๊ณผ ํ•จ๊ป˜ ์ˆ˜์ • ์‚ฌํ•ญ์„ ํ‘ธ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค:

4๊ฐœ์˜ ์ข‹์•„์š”

๋กœ๋ฒ„ํŠธ๋‹˜, ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค :slightly_smiling_face: ์œ ์ง€๋ณด์ˆ˜ ์‹œ๊ฐ„ ์™ธ์—๋„ ์ด๋ ‡๊ฒŒ ๋น ๋ฅด๊ฒŒ ์ˆ˜์ •ํ•ด ์ฃผ์…”์„œ ์ •๋ง ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๊ณง ์—…๋ฐ์ดํŠธ๋ฅผ ์ง„ํ–‰ํ•  ๊ฒƒ์ด๋ฉฐ, ์ด ๊ฒŒ์‹œ๋ฌผ์—๋„ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์—…๋ฐ์ดํŠธํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. :slightly_smiling_face:

์ •๋ง ํ›Œ๋ฅญํ•˜๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์‹œ ํ•œ๋ฒˆ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! :slightly_smiling_face:

1๊ฐœ์˜ ์ข‹์•„์š”

์•ˆ๋…•ํ•˜์„ธ์š”. ์ด ํ”Œ๋Ÿฌ๊ทธ์ธ์œผ๋กœ ํ•€์„ ๋†“์•„ ์ง€๋„์— ์œ„์น˜๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์•„์‹œ๋Š” ๋ถ„ ๊ณ„์‹ ๊ฐ€์š”?

์ผ๋ถ€ ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ์œ„์น˜๋Š” ์ขŒํ‘œ ์—†์ด๋Š” ํŒŒ์•…ํ•˜๊ธฐ ์–ด๋ ค์šด ๊ณณ์— ์žˆ์–ด, ์ผ๋ถ€ ์‚ฌ์šฉ์ž๋“ค์ด ์œ„์น˜๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์„ ๊บผ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

2๊ฐœ์˜ ์ข‹์•„์š”

๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ด์ „์— ์ด ๊ธฐ๋Šฅ์„ ์š”์ฒญํ•œ ๊ฒƒ ๊ฐ™์€๋ฐ, ํ˜„์žฌ ๋ชฉ๋ก์—๋Š” ์—†๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.

๊ธฐ๋Šฅ ์š”์ฒญ์€ ์—ฌ๊ธฐ์„œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค: Pavilion

๋‹ค๋งŒ, ํ”Œ๋Ÿฌ๊ทธ์ธ ์œ ์ง€๋ณด์ˆ˜๋กœ ๋ณดํ†ต ๋ฐ”์œ ํŽธ์ด๋ผ, ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ž‘์—…์„ ํ›„์›ํ•˜์ง€ ์•Š๋Š” ํ•œ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์€ ๋“œ๋ฌผ๋‹ค๋Š” ์ ์„ ์ฐธ๊ณ ํ•ด ์ฃผ์„ธ์š”.

PR(ํ’€ ๋ฆฌํ€˜์ŠคํŠธ)๋„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ ์ด ๊ธฐ๋Šฅ์€ ์ถ”๊ฐ€ํ•˜๊ธฐ ์ข‹์€ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

5๊ฐœ์˜ ์ข‹์•„์š”

์•ˆ๋…•ํ•˜์„ธ์š”,

ํ† ํ”ฝ ์ œ๋ชฉ ์•„๋ž˜ ์œ„์น˜ ์ •๋ณด์— ๋ฌธ์ œ๊ฐ€ ์žˆ์Œ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ /preferences/profile์—์„œ ์ด์ „์— ์ถ”๊ฐ€ํ•œ ์œ„์น˜๋ฅผ ์‚ญ์ œํ•˜๋ฉด, ์œ„์น˜๊ฐ€ ์ œ๊ฑฐ๋˜๋Š” ๋Œ€์‹  ํ† ํ”ฝ ์ œ๋ชฉ ์•„๋ž˜์— ๋นˆ ์œ„์น˜๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค :slightly_smiling_face:

์•ˆ๋…•ํ•˜์„ธ์š”!

list/topic-list-item.raw ํ…œํ”Œ๋ฆฟ์„ ์ˆ˜์ •ํ•˜์—ฌ ํ† ํ”ฝ ๋ชฉ๋ก์— ์œ„์น˜๋ฅผ ํ‘œ์‹œํ•˜๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค:

    {{#if topic.location}}
      <div class="title-location">
        {{d-icon 'map-marker-alt'}} {{location-format topic.location opts}}{{location-label-container}}
      </div>
    {{/if}}

ํ•˜์ง€๋งŒ ์ œ ์กฐ๊ฑด๋ฌธ์ด ์ œ๋Œ€๋กœ ์ž‘์„ฑ๋˜์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๋ฉด ํ† ํ”ฝ ๋ชฉ๋ก ๋ฃจํ”„๊ฐ€ ๊นจ์ง€๊ฑฐ๋“ ์š”.

handlebars ํ…œํ”Œ๋ฆฟ์—์„œ ํ† ํ”ฝ์˜ ์œ„์น˜๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ผ๊นŒ์š”?

1๊ฐœ์˜ ์ข‹์•„์š”

์ด๊ฒƒ์„ ์˜ค๋ฒ„๋ผ์ด๋“œํ•˜๋Š” ๊ฒƒ์€ ์ข€ ๊ทน๋‹จ์ ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ปค๋„ฅํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ธ๊ฐ€์š”?:

topic-list-after-title ๋˜๋Š”
topic-list-before-category

An interesting strategy for passing properties via raw template plugin outlets ๋ฅผ ์ฐธ๊ณ ํ•ด ๋ณด์„ธ์š”.

2๊ฐœ์˜ ์ข‹์•„์š”

์ ํ•ฉํ•œ ์ปค๋„ฅํ„ฐ๋ฅผ ์ฐพ์ง€ ๋ชปํ•ด์„œ์ž…๋‹ˆ๋‹ค (ํ˜น์€ 2๋…„ ์ „ ํ…œํ”Œ๋ฆฟ์„ ์ˆ˜์ •ํ–ˆ์„ ๋‹น์‹œ์—๋Š” ์กด์žฌํ•˜์ง€ ์•Š์•˜์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค) :sweat_smile:

์ด ๋ฐฉ๋ฒ•์ด ๋” ์‰ฌ์šธ ๊ฒƒ ๊ฐ™์•„์„œ ์‹œ๋„ํ•ด๋ณผ๊ฒŒ์š”, ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!


์Œโ€ฆ ์ด ์ปค๋„ฅํ„ฐ๋“ค์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.

์‹œ๋„ํ•ด ๋ณด๊ณ  ์‚ดํŽด๋ณธ ์ง€๋ฃจํ•œ ๋‚ด์šฉ๋“ค

Developing Discourse Themes & Theme Components ๋ฅผ ์ฝ์—ˆ์Šต๋‹ˆ๋‹ค.

์ปค๋„ฅํ„ฐ์— HTML ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ์‹์ด ์ด๊ฒƒ์ด๋ผ๊ณ  ๊ฐ€์ •ํ•˜๋ฉด:

<script type="text/x-handlebars" data-template-name="/connectors/topic-above-post-stream/test">
  <div style="height: 200px; width: 200px;background: red"></div>
</script>

๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‹œ๋„ํ•ด ๋ณด์•˜์Šต๋‹ˆ๋‹ค.

<script type="text/x-handlebars" data-template-name="/connectors/topic-list-after-title/test">
  <div style="height: 200px; width: 200px;background: red"></div>
</script>

ํ•˜์ง€๋งŒ ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. topic-list-item์ด .hbs ํŒŒ์ผ์ด ์•„๋‹Œ .hbr ํŒŒ์ผ์ด๊ธฐ ๋•Œ๋ฌธ์ธ๊ฐ€์š”?

(deprecated) Plugin outlet locations theme component ์„ ์‚ฌ์šฉํ–ˆ์ง€๋งŒ, ํ† ํ”ฝ ๋ชฉ๋ก ์•ˆ์˜ ์•„์›ƒ๋ ›์ด ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ์ด๊ฒƒ๋„ ์‚ดํŽด๋ดค์Šต๋‹ˆ๋‹ค What is the difference between raw.hbs handlerbar files and only .hbs handlerbar files?.

์•„๋‹ˆ๋ฉด https://github.com/discourse/discourse-topic-thumbnails/blob/main/javascripts/discourse/connectors/topic-list-before-link/topic-thumbnail.hbr ์ฒ˜๋Ÿผ ์ถ”๊ฐ€ ํŒŒ์ผ์ด ์žˆ๋Š” ํ…Œ๋งˆ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•˜๋Š” ๊ฑธ๊นŒ์š”?

ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์„œ๋Š” ์ƒˆ๋กœ์šด ์ปค๋„ฅํ„ฐ๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ๋ฐ˜๋ฉด, topic-list-after-title๊ณผ topic-list-before-category๋Š” ์ด๋ฏธ ์กด์žฌํ•ฉ๋‹ˆ๋‹คโ€ฆ ๊ทธ๋ž˜์„œ ์ข€ ํ˜ผ๋ž€์Šค๋Ÿฝ๋„ค์š”.

2๊ฐœ์˜ ์ข‹์•„์š”

์•„๋‹ˆ๋ฉด ์ด๋ ‡๊ฒŒ ํ•ด๋ณด๋Š” ๊ฑด ์–ด๋–จ๊นŒ์š”?:

image

image

{{context.topic.location.street}}

image

์•„๋‹ˆ๋ฉด ๋” ์ข‹์€ ๋ฐฉ๋ฒ•์€:

{{location-format context.topic.location}}

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ต๋‹ˆ๋‹ค:
image

๊ทธ ํ›„ CSS๋กœ ์„ธ๋ฐ€ํ•˜๊ฒŒ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์˜ˆ: ์ค„๋ฐ”๊ฟˆ).

2๊ฐœ์˜ ์ข‹์•„์š”

๋„ค, ์™„๋ฒฝํ•ฉ๋‹ˆ๋‹ค, ๋กœ๋ฒ„ํŠธ๋‹˜! ์ •๋ง ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

๊ด€์‹ฌ ์žˆ๋Š” ๋ถ„๋“ค์„ ์œ„ํ•ด ๋ง์”€๋“œ๋ฆฌ์ž๋ฉด, ์ด ํ…Œ๋งˆ ์ปดํฌ๋„ŒํŠธ๋Š” ๋‹จ์ˆœํžˆ ์ฃผ์ œ ๋ชฉ๋ก์— ์œ„์น˜ ์ •๋ณด๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

4๊ฐœ์˜ ์ข‹์•„์š”

์•„์›ƒ๋ ›์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ์šฐ์•„ํ•˜์ง€๋งŒ, ๋ฌธ์ œ๊ฐ€ ํ•˜๋‚˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•„์›ƒ๋ ›์˜ ์œ„์น˜๋Š” ๋ฐ”๋กœ ์ฃผ์ œ ์ œ๋ชฉ์˜ ๋’คโ€ฆ ๊ทธ๋ฆฌ๊ณ  ๋ฐฐ์ง€ div(์ฝ์ง€ ์•Š์€ ๋ฉ”์‹œ์ง€๋‚˜ ์ƒˆ ์ฃผ์ œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ ์„ ํ‘œ์‹œํ•˜๋Š” ๊ณณ)์˜ ์•ž์— ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ:

CSS๋ฅผ ์‚ฌ์šฉํ•ด๋„(์—ฌ๋Ÿฌ ๊ฐ€์ง€๋ฅผ ์‹œ๋„ํ•ด ๋ณด์•˜์Šต๋‹ˆ๋‹ค) ์ด ๋ฌธ์ œ๋ฅผ ์‰ฝ๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ #contribute:feature์—์„œ ์ƒˆ๋กœ์šด ์•„์›ƒ๋ ›์„ ์š”์ฒญํ•˜๋Š” ๊ฒƒ์€ Discourse์— ์ถ”๊ฐ€๋  ๋งŒํผ ํฅ๋ฏธ๋กญ์ง€ ์•Š๋‹ค๊ณ  ๋А๊ปด์ง‘๋‹ˆ๋‹ค.


์ˆ˜์ •: ๋ฐฐ์ง€๊ฐ€ ์œ„์น˜ ๋ฐ”๋กœ ์˜†์— ์˜ค๋„๋ก ์กฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ์ •๋„๋ฉด ๋ฉ๋‹ˆ๋‹ค.

image

1๊ฐœ์˜ ์ข‹์•„์š”