Цитата:
Сообщение от dmartynenko
А тут user_content_image->main, получается, вы полностью сделали свою логику обработки IMAGE ?
Запостите сюда для народа
|
Да - и еще пару моментов - на заметку - что бы не забыть в первую очередь - т.к. думаю что это будет обмен опытом...
1. которого я так долго ждал: я ушел от папки fileadmin - т.е. я больше не использую ее для хранения шаблонов сайта, функций и всего прочего: - она у меня осталась чистой - только для "tree" (я ее так называю) - т.е. по чпу она у меня копирует содержимое сайта...
Например есть раздел:
http://studsovet-life.ru/projects/zkp-42/
соответственной в fileadmin есть
fileadmin/projects/zkp-42/ - где хранятся фотки для данного раздела и материалы zip , rar - если они есть , в данном проекте фоновое изображение!
и в настоящем я готов убить любого - кто перемещает данную логику расфасовки материала! -
Стараюсь закрывать все на index кроме fileadmin, uploads (хотя данную папку я тоже стараюсь не использовать т.к. она дублирует контент - а это лишний объем и основного сайта !
2. момент - никогда не использую javascript и style в html-коде - все выношу во внешние файлы (исключение metrika) - таким образом получается начистейший код
- ну и так как ext-у меня только самый минимум - html кода и php-кода лишнего нет - в т.ч. extbase...
в данном проекте логика построения systemdir Такая:
depo.css - основной стиль дизайна
content.css - стили контента
content.m.css - стили контента (переписывают content.css)
content.p.css - стили контента (переписывают content.css)
для мобильных используются специальный jquery mobile css
--
document-ready.js - запуск проекта
document-ready.m.js - запуск проекта мобильный
хотя в больших проектах
document-ready.js - собирается из различных кусочков
в данном проекте document-ready.js один...
3. момент - ну это касательно таблиц pages и tt_content - данный проект построен исключительно на страницах - а вообще страницы использую по минимуму - в основном на них работают плагины - которые создают виртуальный страницы и содержимое (возможно без виртуальных страниц).... а tt_content предлагает создать контент (картинка, изображение, текст, файл) - для упрощенных проектов это вполне приемлемо - но создавать страницы по такому набору в больших проектах - это очень не удобно) - и это к вопросу о данном расширении:
http://forum.typo3.biz/showthread.php?t=6697
Для редакторов сайта как вижу нужно задавать жесткую форму (где уже скрипт сам автоматически расставит элементы)...
Вот если посмотреть
http://newsland.com/news/detail/id/1125491/
то здесь каждая новость имеет жесткий набор параметров (заголовок, фото с права, комментарии, текст)
таким образом - одна новость = одна запись в БД
а с
http://forum.typo3.biz/showthread.php?t=6697 - одна новость = несколько записей в БД
Причем фото с права вставляется не через визуальный редактор - а через специальное поле для этого - уверен на 110%!
4. ну и по поводу css_styled_content (примеры):
ХОЧУ ПОДЧЕРКНУТЬ ОДИН МОМЕНТ - очень важный на мой взгляд для понимания - typo3 через css_styled_content - пытается стандартизировать то, что в принципе не возможно стандартизировать - т.к. это зависит от проекта - поэтому перешел на user->main()
Картинки images.php:
PHP код:
<?php
//Элемент контента - а) список изображений (cType image) б) изображения с текстом (cType textpic)
class user_content_image {
var $cObj;
function main($content, $conf) {
//Разбиваем загруженные изображения, а также стили к ним и подписи
$allStyle = explode(chr(10) , $this->cObj->data['imageorient']);
$allTitle = explode(chr(10) , $this->cObj->data['imagecaption']);
$allImage = explode("," , $this->cObj->data['tx_emreferences_filereferences']);
for ($i = 0; $i < count ($allImage); $i ++)
{
//imageorient (стандартный-ничего не трогаем | half 191c - половинчатое изображение | wide широкий | wide text широкий с текстом)
//Создаем уменьшенную копию изображения
$arrImgParams['file'] = 'fileadmin/'.$allImage[$i];
$arrImgParams['file.']['width'] = (trim($allStyle[$i]) == "wide" || trim($allStyle[$i]) == "wide text") ? '404c' : '120c';
$arrImgParams['alttext'] = str_replace("|>" , false, $allTitle[$i]); //удаляем "самовведенный тэг" перевода строки
$arrImgParams['titleText'] = str_replace("|>" , false, $allTitle[$i]); //удаляем "самовведенный тэг" перевода строки
$img = $this->cObj->IMG_RESOURCE($arrImgParams);
//Удаляем атрибуты width и height
//$img = preg_replace("/(width=\".+?\"|height=\".+?\")/", null,$img);
$img = "/".$img;
//Узнаем размеры временного изображения, что бы вписать их в style div
preg_match('/src=([\'"])?((?(1).+?|[^\s>]+))(?(1)\1)/is', $img, $basename);
$size = getimagesize ($basename[2]);
//параметры для моб. версии сайта
$jquerymobile = 'rel="external"'; // data-something="something'.$i.'" data-another-thing="anotherthing'.$i.'"
//css-класс для больших 100% и маленьких 33%-изображений
$cssClassImage = ($arrImgParams['file.']['width'] == '404c') ? 'width100' : 'width33' ;
//Вариант №2 - с подписью и при условии, что подпись существует
if (trim($allStyle[$i]) == "wide text" AND strlen (trim($allTitle[$i])) > 0 )
{
$content .= '<div class="imageBox"><div class="imageFrame text '.$cssClassImage.'" style="width: '.$size[0].'px; height: '.$size[1].'px;">
<a class="imageZoom" title="'.$arrImgParams['titleText'].'" href="/fileadmin/'.$allImage[$i].'" '.$jquerymobile.'><img src="'.$img.'" alt="'.$arrImgParams['titleText'].'" border="0"></a></div>';
//Если существует текст и cType textpic
if ($this->cObj->data['CType'] == "textpic")
{
$this->cObj->data['bodytext'] = $this->cObj->parseFunc($this->cObj->data['bodytext'],$GLOBALS['TSFE']->tmpl->setup['lib.']['parseFunc_RTE.']);
$content .= '<div class="textAlt">'.$this->cObj->data['bodytext'].'</div></div>';
}
else
$content .= '<div class="textAlt">'.str_replace("|>" , "<br />", $allTitle[$i]).'</div></div>';
}
//Вариант №1 - без подписи
else
$content .= '<div class="imageFrame text '.$cssClassImage.'" style="width: '.$size[0].'px; height: '.$size[1].'px;">
<a class="imageZoom" title="'.$arrImgParams['titleText'].'" href="/fileadmin/'.$allImage[$i].'" '.$jquerymobile.'><img src="'.$img.'" alt="'.$arrImgParams['titleText'].'" border="0"></a></div>';
}
return '<center><div class="imageWrap">'.$content.'</div></center><br class="clearall" style="clear: left;">';
}
}
?>
Слайдер sliderz.php
PHP код:
<?php
//Наполнение слайдера в шапке изображениями
class user_sliderz {
var $cObj;
function main($content, $conf) {
$handle = opendir (PATH_site."fileadmin/def-studsovet-x/systemdir/images/slider/");
//Собираем массив с файлами слайда
while($file = readdir($handle))
if (is_file(PATH_site."fileadmin/def-studsovet-x/systemdir/images/slider/".$file))
{
$path_parts = pathinfo( PATH_site."fileadmin/def-studsovet-x/systemdir/images/slider/".$file );
$sliderlement[ $path_parts["filename"] ] = $file;
}
//Сортируем массив
ksort ($sliderlement);
//Выводим содержимое (собираем контент)
foreach ($sliderlement as $key => $val):
$content .= "<div class='element'><img src='";
$content .= "/fileadmin/def-studsovet-x/systemdir/images/slider/".$val;
$content .= "'></div>\n";
endforeach;
return $content;
}
}
?>
при подобном подходе можно применять очень служную логику - "шаблон > фотографии > поля для ввода"
Но как вижу - задача программиста ни в том, что бы создавать сложную логику (это опять же к вопросу того, что обсуждалось на форуме - где-то писалось что создать такой же магазин как у битрикса очень сложно - ссылаясь на то, что там очень много зависимостей - самый сложный участок - это интеграция с 1С или другой системой, да и вообще в любых задачах - а в остальном терпимо!) а в том, что бы создать формы для ввода данных - что бы ее потом могли легко заполнить отдел секретарей - и ничего не сломать...
5. момент sitemap.xml и robots.txt - Генрятся через TS
и если еще что-то вспомну - напишу красненьким сюда же...