مشکل در فراخوانی اطلاعات در head در فونیکس


#1

با درود خدمت دوستان گرامی حالا وارد آخرین فاز پروژه ام شدم اونم بخش گرافیکی به مباحث پایه سئو برخورد کردم مثل فراخوانی مناسب متاتگ ها و برخی از تگ های html در هد قالب بر اساس هر روتر و هر صفحه .

در همین رابطه من پستی در انجمن الکسیر نیز زدم

مشکل :

مشکل اساسی این هست که متاتگ های هر صفحه من یکی نیست که بخواهم آن را مثل یک متغییر کنم و در کنترلرم بیام و assign کنم پس من نیاز به راحی بهتر و داینامیک تری دارم چون ممکنه برخی مواقع تعداد متا تگ های من بسیار زیاد شود . حال برخی از راه حل هایی مثل این پست وجود دارد

اکثر این راه حل ها برای موارد کاملا ثابت می باشند . ولی یک نفری در پست بالا راه حل های زیر رو پیشنهاد داد

اولین قدم :

در مسیر زیر
templates/layout/app.html.ee

<%= if @meta_attrs, do: meta_tags(@meta_attrs) %>

در دومین قدم:

در مسیر زیر
controllers/page_controller.ex

def index(conn, _params) do
    attrs_list = [%{name: "keywords", content: "........"},
                %{name: "description", content: "........."},
                %{property: "og:image", content: "......"}]
    render(conn, "index.html", meta_attrs: attrs_list)
  end

سومین قدم:
در مسیر زیر
views/layout_view.ex

def meta_tags(attrs_list) do
    Enum.map(attrs_list, &meta_tag/1)
  end

def meta_tag(attrs) do
    tag(:meta, Enum.into(attrs, []))
  end

حالا من فکر می کنم این راه حل هم کمی برام جالب نیست احساس می کنم دست منو می بنده و منم اینو دوست ندارم من دسترسی کامل به head قالب می خوام . می خوام بجای این مراحل بیام و کامل دستی یک html مثلا بدم در کنترلرم بگم در اونجا بیار یعنی یک رشته استرینگ

به نظرتون چه کاری می تونم انجام بدم ؟

و مشکل اصلی تر اینکه من اصلا کد بالا رو درک نکردم که دقیقا داره چیکار می کنه


آموزش ایجاد متاتگ در phoenix
#2

میتونی یک map داشته باشی که کلیدش اسم صفحه باشه و ارزشش لیست تمام تگ ها مثل بالا و تمام تگ هارو با توجه به اسم صفحه load کنه


#3

درود خدمت شما, سام عزیز می شه یک مثال بزنی ؟

من یک پستی رو تازه دیدم
https://www.alexfilatov.com/2016/06/30/add-facebook-open-graph-tags-to-phoenix-framework-web-page/

که به صورت اچ تی ام ال داره می یاره داخل هد آیا منظور شما این هست ؟ هنوز تستش نکردم

در لینک بالا تقریبا با چند if می شه کارو انجام داد ولی نمی دونم چطور می تونم این کارو بکنم مثلا

<%= ogtags(assigns) %>

اگر در کد بالا ببنید اومده یک ورودی داده ولی اگر می شد دو ورودی داد خیلی خوب می شد اینجوری من حتی می تونستم تفکیک بندی کنم

به نظرتون کاری که این لینک کرده بهتر نیست می شه یک map داد بهش در کنترلر و اون می یاد بر اساس کلید و ولیو اون رو تبدیل به اچتی ام ال می کنه

فقط مشکل اصلی اینکه داره با تگ هارو خودش دستی می ده و این اضافه کاری زیادی داره!!


#4

تویک ماژول یک داده به این شکل بگذار که اسمه تمامه صفحه ها باشه با لیست تگ ها

tags = %{dashboard:  [%{name: "keywords", content: "........"},
                %{name: "description", content: "........."},
                %{property: "og:image", content: "......"}],
         products:    [%{name: "keywords", content: "........"},
                %{name: "description", content: "........."},
                %{property: "og:image", content: "......"}]    
              }

بعد قبل اینکه صفحه load بشه این مپ بخون با کلید اسمه صفحه و تمام تگ هاشو بگذار مثله بالا


آموزش ایجاد متاتگ در phoenix
#5

بستگی به خودت داره که صفحه هات چقدر باهم تگ هاشون فرق داران