問題: 渲染QR碼爲用戶在哲基爾模板保留最後QR所有用戶:渲染來自傑奇插件不同的標籤在同一個模板
我有這樣的代碼:
的index.html
{% for person in staff %}
{% qr person.qr %}
{% endfor %}
qr.rb
require 'rqrcode_png'
class QrCodeTag < Liquid::Tag
def initialize(tag_name, url, tokens)
super
@url = url.strip
end
def lookup(context, name)
lookup = context
name.split(".").each { |value| lookup = lookup[value] }
lookup
end
def render(context)
page_url = "#{lookup(context, 'site.url')}#{lookup(context, @url)}"
qr = RQRCode::QRCode.new(page_url, size: 10) # Size increased because URLs can be long
png = qr.to_img
<<-MARKUP.strip
<div class="qrcode">
<img src="#{png.to_data_url}" alt="#{page_url}">
</div>
MARKUP
end
end
Liquid::Template.register_tag('qr', QrCodeTag)
2017-09-01-john-doe.md
---
category: staff
name: John Doe
qr: "http://www.johndoe.com/"
---
John is really cool...
2017-09-02-maria-doe.md
---
category: staff
name: John Doe
qr: "http://www.mariadoe.com/"
---
Maria is really cool..
現在,呈現頁面時,它呈現 頁成功,但保持相同的對象(QR碼) 爲所有用戶在同一頁面上呈現(它們必須位於同一頁面上)。
我很確定問題在於,在創建新的對象或與未正確分配的全局變量相關的東西時,我並未刪除舊對象。
在這種情況下,每個用戶應該有不同的QR碼,但他們都一樣。
解決方法:
如果您在摘錄添加標籤,你將有渲染精細的QR碼標籤。
現在有沒有人可以解釋爲什麼如果你像下面的例子那樣在摘錄中添加數據,它會爲每個用戶渲染一個不同的QR碼,但是如果在前面的內容中將它作爲變量添加將是相同的對於所有人(最後一個人會重複)?
---
category: staff
name: John Doe
qr: "http://www.johndoe.com/"
---
{% qr http://www.johndoe.com %}
John is really cool...
最後一個例子真的有用嗎?或者在渲染時出現錯誤? ('{%qr http://www.johndoe.com%}') –
它呈現完美,事情是我只爲所有用戶獲取最新的QR。 – ccamacho
它不會像這樣工作,'page_url =「#{lookup(context,'site.url')}#{lookup(context,@url)}」'會嘗試查找上下文中發送的字符串,所以它會在上下文中尋找「person.qr」,所以發送一個url,應該給出這樣的錯誤:'nil:NilClass'的undefined method'[]'。它是否生成了一個對於http:// www.johndoe.com /'url正確的qr代碼? –