0 Пользователей и 1 Гость просматривают эту тему.
  • 16 Ответов
  • 1246 Просмотров
*

goga_pgasovav

  • Захожу иногда
  • 385
  • 4 / 0
  • Внимательный джумловод
И снова здравствуйте!
Я опять со своими странными задачами  ;D
Короче, в папочке с картинками шаблона лежит файлик sprite.svg
Как бы мне взять, и в конце index.php, до закрытия </body> вставить его содержимое (весь код)?  ::)
Попробовал что типа:
Код: php
$url = $this->baseurl.'/templates/'.$this->template.'/images/sprite.svg';
$svg = file_get_contents("$url");
echo $svg;
Но не работает...
Может кто-то уже делал нечто подобное?
*

Sgrey

  • Захожу иногда
  • 75
  • 4 / 1
Код
<img src="<?php echo $this->baseurl.'/templates/'.$this->template.'/images/sprite.svg' ?>" >
*

goga_pgasovav

  • Захожу иногда
  • 385
  • 4 / 0
  • Внимательный джумловод
Sgrey, нет, не годится)
Этот код просто вставит картинку, как обычный <img>.
Мне же нужно, чтобы всё содержимое <svg> файла добавилось в шаблон в виде кода.
Откройте любой SVG-файл в редакторе, и увидите что-то на подобие XML-кода. Вот, всё это и надо запихнуть в index.php
*

Sgrey

  • Захожу иногда
  • 75
  • 4 / 1
Я в курсе, что такое svg.
Код
$url = 'templates/'.$this->template.'/images/sprite.svg';
$svg = file_get_contents($url);
echo $svg;
или просто вставьте его код в файл руками.
*

goga_pgasovav

  • Захожу иногда
  • 385
  • 4 / 0
  • Внимательный джумловод
Sgrey, благодарю! Получилось. Так и не понял, почему не срабатывало. Без кавычек $url я тоже пробовал...
А руками вставлять бессмысленно. Файл периодически обновляется новыми элементами спрайта, и хотелось именно автоматизации!

Теперь возник вопрос, по изменению встраиваемого кода.
Т.е. необходимо взять из него только отдельные <svg> объекты, а не весь код с заголовком.
Может знаете как это сделать?  ::)
*

Sgrey

  • Захожу иногда
  • 75
  • 4 / 1
Не работало из-за неправильного пути к файлу. Смотря как часто обновляется и какого он размера, может проще вставлять руками.
Не совсем понял, чего вы хотите в итоге добиться, объясните задачу подробней.
*

goga_pgasovav

  • Захожу иногда
  • 385
  • 4 / 0
  • Внимательный джумловод
Рассказываю.
Например, вот код SVG, который я сейчас вставляю:

Код: xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
    <style>   
        :root svg {display: none;}
        :root svg:target {display: block;}
    </style>
    <svg id="logo">...</svg>
    <svg id="location">...</svg>
    <svg id="phone">...</svg>
    <svg id="email">...</svg>
</svg>

Мне же нужно взять только:

Код
    <svg id="logo">...</svg>
    <svg id="location">...</svg>
    <svg id="phone">...</svg>
    <svg id="email">...</svg>

Ну, как-то так.
*

Sgrey

  • Захожу иногда
  • 75
  • 4 / 1
Остался неясным вопрос, зачем все это нужно? Почему просто не использовать несколько отдельных файлов? 
*

goga_pgasovav

  • Захожу иногда
  • 385
  • 4 / 0
  • Внимательный джумловод
Sgrey, ну как же. Затем, зачем вообще существуют спрайты — меньшее количество запросов к серверу. Для небольшого сайта — не критично, для крупного и популярного — необходимость.
*

Sgrey

  • Захожу иногда
  • 75
  • 4 / 1
Кто то из нас что то явно не понимает ::) Я знаю CSS спрайты, но какое они имеют отношение, к тому что вы хотите сделать?

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

Если вам все равно это надо, то это можно сделать используя XML или регуляркой. Однако хотелось бы все-таки понять вашу идею.
*

goga_pgasovav

  • Захожу иногда
  • 385
  • 4 / 0
  • Внимательный джумловод
Sgrey, вы знаете, я не хотел бы тут флуд в пустую разводить, мол «что, зачем и почему».
Есть задача, пытаюсь найти решение, т.к., как правило, это потом помогает не только мне одному.

Есть вероятность, что вы поняли меня некорректно. Речь идёт не о CSS-спрайтах (что это, я не знаю, увы) ^-^
Речь идёт об SVG-спрайте (графическом). Это файл, который содержит в себе целый набор графических элементов <svg>, обращение к которым происходит с помощью ID.
Т.е. в коде мы указываем что-то на подобие <img src="/sprite.svg#logo">, где 'logo' это ID определённого элемента в спрайте.

Например, на странице используется два десятка изображений, отображение которых реализовано не фоном, а объектами <img> или <svg>.
Я не хочу делать двадцать запросов к серверу, и для этого использую спрайт. Для корректной работы спрайта, мне необходимо включить его код в тело страницы. С чем вы мне, собственно, и помогли.

Дальше я решил (по определённым причинам, не относящимся к данному вопросу), задачу немного усложнить, и выбрать из включаемого файла лишь необходимое содержимое, без хидера и прочего «мусора» так сказать.

Вот вы написали про регулярные выражения. Возможно они помогли бы.
Я могу лишь на пальцах объяснить: надо найти все вложенные объекты, начинающиеся с <svg> и заканчивающиеся </svg>.
Ну как-то так. Какие ещё подробности нужны, я не знаю)
« Последнее редактирование: 02.03.2020, 16:42:30 от goga_pgasovav »
*

Sgrey

  • Захожу иногда
  • 75
  • 4 / 1
Так и я не ради флуда спрашиваю. Форум это двухсторонний процесс общения и обогащения знаниями. Мне эта идея незнакома, поэтому либо я чего-то не знаю, либо вы заблуждаетесь. Зачастую мы все придумываем что-то, а потом выясняется, что это все делается по другому и проще. Пытаюсь разобраться, не более того. А отвечать не понимая зачем и для чего, мне не интересно.

Из вашего объяснение все равно не совсем понятно, как это работает, но искать в интернете мне сейчас некогда.
Что касается регулярки, то я в них не силен и наверно ей в данном случае будет не просто.
Я бы лучше смотрел в сторону simplexml, но готового рецепта у меня нет, надо пробовать.
*

fsv

  • Живу я здесь
  • 2765
  • 402 / 2
Например, вот код SVG, который я сейчас вставляю:
Мне же нужно взять только:
<svg><use ...
Веб-разработка: заказ. Только новая объемная разработка. Качественно, дорого.
*

Sgrey

  • Захожу иногда
  • 75
  • 4 / 1
Посмотрел в интернете, оказывается я сильно отстал от жизни. ::) SVG-спрайт это не то, что я думал. Теперь идея вставлять SVG-спрайт в тело страницы обрела смысл. А вы говорите, мол для чего «что, зачем и почему». Чтобы узнать что то новое, хотя мне это не требуется сейчас, но может пригодиться в будущем.
Правда для чего вы хотите вырезать часть файла с помощью php все равно не понял, это делается через use, view ... Может чего-то не понял до конца, смотрел бегло.
*

goga_pgasovav

  • Захожу иногда
  • 385
  • 4 / 0
  • Внимательный джумловод
Sgrey, ну раз уж вас заинтересовал данный подход к использованию графики, тогда объясню, зачем вырезать  ;)
В SVG-файле используется CSS-стиль:

Код: css
    <style>    
        :root svg {display: none;}
        :root svg:target {display: block;}
    </style>

Он необходим для скрытия всех объектов SVG, кроме того, который будет использоваться.
Это в том случае, когда я использую объекты спрайта в виде background (фонов), и беру их из внешнего файла.
А если мне необходимо эти же объекты использоваться как изображение в коде, то нужно встроить файл.
И вот этот стиль уже является паразитным, т.к. в такой ситуации объекты спрайта перестают отображаться и <style> нужно удалить. Как, впрочем, и <!doctype>, который уже не нужен в случае со встраиванием <svg> в тело документа. Ну это уже дургой вопрос...
В общем, если вам будет нужно это где-то использовать, напишите мне в личку, я объясню подробнее, ибо топик создавался с совершенно иной целью.

Попробую найти решение, и если найду, то отпишусь тут.
*

ProtectYourSite

  • Живу я здесь
  • 2356
  • 135 / 4
  • Безопасность вебсайтов
https://www.php.net/manual/ru/function.preg-replace.php и убрать лишние теги по маске типо
Код
<style>.*</style>
Имхо, свг более избыточно, чем обычные картинки.
А если юзать какой simple XML ,  то неплохо получится просадка по оперативке.
*

Sgrey

  • Захожу иногда
  • 75
  • 4 / 1
Вот честное слово, вы бы уже давно дали ссылку на сайт где это реализовано или статью с описанием, в конце концов привели бы пример спрайта и результат который должен получиться на странице. Потому что ваши объяснения на пальцах все равно до конца не понятны. А так у меня стойкое ощущение, что вы все усложняете.

Вот набросал пример, не знаю так вам надо или нет.
Код
$xml = new SimpleXMLElement(file_get_contents('sprite.svg'));
foreach($xml->svg as $a) {
    $b .= $a->saveXML();
}
echo $b;
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Убрать index.php в url

Автор d0ublezer0

Ответов: 6
Просмотров: 478
Последний ответ 09.08.2022, 09:33:30
от sivers
Вывести переменную шаблона в материал

Автор Little Muk

Ответов: 8
Просмотров: 2251
Последний ответ 08.05.2022, 15:02:46
от Black-kot
Правка шаблона для PDF

Автор newgot

Ответов: 0
Просмотров: 328
Последний ответ 12.01.2022, 23:00:01
от newgot
Вывести материалы в разных позициях шаблона

Автор Alex_gs

Ответов: 4
Просмотров: 544
Последний ответ 14.12.2021, 23:37:54
от anatol81n
Подключить скрипт в body шаблона

Автор IToro82

Ответов: 6
Просмотров: 574
Последний ответ 24.03.2021, 23:28:24
от IToro82