Создание шаблонов HTML с помощью PHP

Проблема состояла в том, где DLLs были расположены.

  • c:\dlls\managed.dll
  • c:\dlls\wrapper.dll
  • c:\exe\my.exe

я подтвердил это путем копирования managed.dll в c:\exe and it worked without issue. По-видимому, CLR не будет искать управляемый DLLs в пути неуправляемого DLL и будет только искать его, где исполняемый файл. (или в GAC).

По причинам, в которые не стоит войти, это - структура, в которой я нуждаюсь, который означал, что я должен был дать CLR руку расположенном управляемый dll. Посмотрите код ниже:

AssemblyResolver.h:

/// <summary>
/// Summary for AssemblyResolver
/// </summary>
public ref class AssemblyResolver
{
public:

static Assembly^ MyResolveEventHandler( Object^ sender, ResolveEventArgs^ args )
{
    Console::WriteLine( "Resolving..." );

    Assembly^ thisAssembly = Assembly::GetExecutingAssembly();
    String^ thisPath = thisAssembly->Location;
    String^ directory = Path::GetDirectoryName(thisPath);
    String^ pathToManagedAssembly = Path::Combine(directory, "managed.dll");

    Assembly^ newAssembly = Assembly::LoadFile(pathToManagedAssembly);
    return newAssembly;
}

};

Wrapper.cpp:

#include "AssemblyResolver.h"

extern "C" __declspec(dllexport) IMyObject* CreateMyObject(void)
{
    try
    {
        AppDomain^ currentDomain = AppDomain::CurrentDomain;
        currentDomain->AssemblyResolve += gcnew ResolveEventHandler( AssemblyResolver::MyResolveEventHandler );

        return new CMyWrapper( );
    }
    catch(System::Exception^ e)
    {
        System::Console::WriteLine(e->Message);

        return NULL;
    }
}
7
задан John Slegers 1 May 2019 в 18:04
поделиться

3 ответа

Одно слово: Организация. Разделение каждой части страницы позволит просматривать / редактировать каждую из них отдельно. Эта простая концепция очень полезна. Например, любой член команды, который хочет управлять процессом входа в систему, может легко понять, что ему нужно отредактировать login_form.phtml , и они могут быть уверены, что редактирование login_form.phtml будет менее вероятно чтобы непреднамеренно вмешиваться в другие функции.

В соответствии с передовой практикой я это делаю (не совсем, но аналогично).

$Title = 'Blah Blah Blah';
$User  = 'Jon Miller';

$ThemeName = "MyGreenPage";
$Contents  = array("User", "Login_Form");

function Include($FileName) {
    if (file_exists($FileName))
        include $FileName;
}

MyGreenPage.phtml :

<html>
  <head>
    <title><?php echo $title; ?></title>
<?php
    foreach($Contents as $Content)
        Include("$Content.pcss");
?>
<?php
    foreach($Contents as $Content)
        Include("$Content.pjs");
?>
  </head>
  <body>
<?php
    foreach($Contents as $Content)
        Include("$Content.phtml");
?>
  </body>
</html>

User.pcss :

/*  Some styles needed by User */

User.pjs :

/*  Some script needed by User */

User.phtml :

    <h3><?php echo $user; ?></h3>

Login_Form.pcss :

/*  Some styles needed by Login_Form */    

Login_Form.pjs :

/*  Some script needed by Login_Form */

Login_Form.phtml :

1
ответ дан 7 December 2019 в 12:21
поделиться

Вам следует ознакомиться с концепциями « макетов » и « помощников просмотра ». Хотя я связался с версией этих концепций Zend Framework, они также должны быть в других средах MVC (и концепции MVC).

Основная идея состоит в том, что «представление» вашей страницы - например, форма входа - это включены в «макет» вашего сайта - общий шаблон, который используется на всем сайте. Когда вы запрашиваете другой контроллер, с другим представлением - например, профилем пользователя - это представление также включено в тот же макет.

Чтобы включить что-то вроде формы входа на все страницы, можно использовать помощник представления. Этот помощник просмотра может отображать текущего пользователя или форму входа в систему, в зависимости от статуса входа. Помощники представления могут быть включены в макет или включены в конкретный контроллер (при условии, что инфраструктура MVC позволяет использовать какие-либо именованные сегменты рендеринга).

Двухэтапный метод включения работает лучше, чем линейное включение частей (включая заголовок , затем контент, затем нижний колонтитул - что вы делаете сейчас), потому что ваши шаблоны не должны разделять теги HTML. В руководстве Zend есть хороший наглядный пример шаблонов представлений в макете.

Чтобы включить что-то вроде формы входа на все страницы, можно использовать помощник просмотра. Этот помощник просмотра может отображать текущего пользователя или форму входа в систему, в зависимости от статуса входа. Помощники представления могут быть включены в макет или включены в конкретный контроллер (при условии, что инфраструктура MVC позволяет использовать какие-либо именованные сегменты рендеринга).

Двухэтапный метод включения работает лучше, чем линейное включение частей (включая заголовок , затем контент, затем нижний колонтитул - что вы делаете сейчас), потому что ваши шаблоны не должны разделять теги HTML. В руководстве Zend есть хороший наглядный пример шаблонов представлений в макете.

Чтобы включить что-то вроде формы входа на все страницы, можно использовать помощник просмотра. Этот помощник просмотра может отображать текущего пользователя или форму входа в систему, в зависимости от статуса входа. Помощники представления могут быть включены в макет или включены в конкретный контроллер (при условии, что инфраструктура MVC позволяет использовать какие-либо именованные сегменты рендеринга).

Двухэтапный метод включения работает лучше, чем линейное включение частей (включая заголовок , затем контент, затем нижний колонтитул - что вы делаете сейчас), потому что ваши шаблоны не должны разделять теги HTML. В руководстве Zend есть хороший наглядный пример шаблонов представлений в макете.

Помощники представления могут быть включены в макет или включены в конкретный контроллер (при условии, что инфраструктура MVC позволяет использовать какие-либо именованные сегменты рендеринга).

Двухэтапный метод включения работает лучше, чем линейное включение частей (включая заголовок , затем контент, затем нижний колонтитул - что вы делаете сейчас), потому что ваши шаблоны не должны разделять теги HTML. В руководстве Zend есть хороший наглядный пример шаблонов представлений в макете.

Помощники представления могут быть включены в макет или включены в конкретный контроллер (при условии, что инфраструктура MVC позволяет использовать какие-либо именованные сегменты рендеринга).

Двухэтапный метод включения работает лучше, чем линейное включение частей (включая заголовок , затем контент, затем нижний колонтитул - что вы делаете сейчас), потому что ваши шаблоны не должны разделять теги HTML. В руководстве Zend есть хороший наглядный пример шаблонов представлений в макете.

3
ответ дан 7 December 2019 в 12:21
поделиться

В этом проекте, над которым я работаю, все представления являются шаблонами XSL. Вместо того, чтобы передавать переменные в представление, я генерирую весь XML в контроллере и трансформирую его с помощью представления.

Мне нравится эта структура, потому что я могу хранить все свои шаблоны в одном файле и располагать их как угодно. Это также стандартный язык шаблонов, который очень гибкий и содержит массу документации. Пока это действительно хорошо работает.

Действительно хорошим примером такой структуры является веб-сайт WoW Armory (см. Источник).

0
ответ дан 7 December 2019 в 12:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: