دسترسی و تغییر اطلاعات کنترلر قبل نمایش در تمپلیت به وسیله veiw


#1

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

def index(conn, _params) do

    breadcrumb = [
      %{
        title: "کامپوننت آسان پرداخت",
        link: "طراحی سایت و بهینه سازی",
      }
    ]
    render(conn, "index.html", breadcrumb: breadcrumb)
  end

حالا من می خوام breadcrumb‍ رو قبل از ارسال به تمپلیت و چاپش بیام تغییر بدم

حالا من به این صورت اقدام کردم : در تمپلیت اون بخش یک پارشال درست کردم به شرح زیر

آدرس تمپلیت : templates/blog/index.html.eex

<%= render TrangellHtmlSiteWeb.BlogView, "_breadcrumb.html", conn: @conn, breadcrumb: @breadcrumb %>

آدرس خود پارشال : ‍templates/blog/_breadcrumb.html.eex


حالا کدی که در پارشال وجود داره به شرح زیر می باشد :

<%= for %{title: title, link: link} <- @breadcrumb do %>
  <%= title %>
<% end %>

حالا من می خوام ‍breadcrumb رو در veiw تغییر بدم نمی خوام بزارم به همون شکلی که در کنترلر تعیین شده ذخیره بشه اومدم به این صورت های زیر انجام دادم هیچ کدوم کار نکرد

def index(conn, _params) do

    new_breadcrumb = [
      %{
        title: "test",
        link: "test",
      }
    ]
    edited_breadcrumb = @breadcrumb ++ new_breadcrumb
    render(conn, "index.html", breadcrumb: edited_breadcrumb)
  end

کد بالا کار نکرد و این کارو نیز انجام دادم

def index(conn, _params) do

    new_breadcrumb = [
      %{
        title: "tts",
        link: "طراحی سایت و بهینه سازی",
      }
    ]
    # edited_breadcrumb = breadcrumb ++ new_breadcrumb
    @breadcrumb = @breadcrumb ++ new_breadcrumb
    render(conn, "index.html", breadcrumb: @breadcrumb )
  end

حالا ارور زیر رو دارم

Warning	Elixir	undefined module attribute @breadcrumb, please remove access to @breadcrumb or explicitly set it before access	13:5
Warning	Elixir	undefined module attribute @breadcrumb, please remove access to @breadcrumb or explicitly set it before access

چطور می تونم در هر view بیام متغییر های هر کنترلر رو تغییر بدم . چون می خوام این کد هامو ببرم توی view که در همه جا شیر می شه ولی برای تست در داخل می خواستم تست کنم

ممنون می شم راهنمایی بفرمایید متاسفانه از لینک زیر متوجه نشدم
https://hexdocs.pm/phoenix/templates.html#content


بنده به این صورت نیز عمل کردم باز جوابگو نبود

  def breadcrumb(assigns) do
    breadcrumb = [
        %{
          title: "tts",
          link: "طراحی سایت و بهینه سازی",
        }
      ]
    breadcrumb
  end

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


#2

در آخر تصمیم گرفتم از view استفاده نکنم و در یک فایل ex در lib خودم فانکشینی که می خوام رو درست کنم . شاید کمی اضافه کد باشه ولی دسترسی بهتری خواهم داشت

در آخر خاک بر سر veiw فونیکس :joy:


#3

سوالم ربطی به این موضوع نداره
چرا از slime استفاده نمیکنی، تمپلت انجین فینکس خیلی جالب نیست


#4

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

فردا شروع می کنم در موردش تحقیق کردن ببنیم چطوری هاست . شما جایی استفاده اش کردید ؟


#5

بله من استفاده میکنم، اگر به مشکلی برخوردی اطلاع بده