Спасибо) Начал читать примеры) А еще вариантов нет? Ну чтобы избежать копирования? Или это непобедимо? Знаю ведь что можно хД
Здравствуйте. Мучаюсь над автоматическим добавлением материалов.
Материал имеет 3 доп поля. Одно из полей - поле с картинкой.
Теперь смотрим на код:
$file = (object) array(‘uid’ => $i ,‘uri’ => $file_path,‘filemime’ => file_get_mimetype($filepath),‘status’ => 1,);$file = file_copy($file, “public://”);$node->field_image[LANGUAGE_NONE][0] = (array)$file;
Что делает функция file_copy? - она копирует файл из папки модуля в папку /sites/all/default/files
и добавляет в базу данных запись о файле
Так вот у меня 1753 файлов картинок, общим размером 70+ мегабайт. Как вы представляете процесс установки такого модуля на слабенький виртуальный хостинг. Копирование ПАКА файлов - это пол часа работы процессора на хостинге. Например на sweb доступно только 30 секунд для процесса! Если дольше - завершается принудительно. И вот представьте пользователь моего модуля решил его установить себе - и получил такой косяк. Я не хочу чтобы меня материли...
Поэтому вместо file_copy($file, “public://”); я пишу так:
$file_patch = drupal_get_path('module', 'rmodule') . "/ПАПКА с КАРТИНКАМИ".$artist['img_url']; $file = (object) array( 'uid' => 1, 'status' => 1 );global $user; $file = new stdClass; $file->uid = $user->uid; $file->filename = basename($file_patch); $file->uri = $file_patch; $file->filemime = file_get_mimetype($file_patch); $file = file_save($file); file_usage_add($file, 'rmodule', 'node', 1); $node->author_image[LANGUAGE_NONE][0] = array( 'fid' => $file->fid );
То есть $file = file_save($file); file_usage_add($file, 'rmodule', 'node', 1);
-это добавляет файл в бд и возвращает его fid и прочее, что позволяет заполнить поле $node->author_image
Вроде все красиво, НО. Картинки в нодах не отображаются, Вместо того чтобы отдать урл до картинки вот что выводит друпал:
http://test1.ru/sites/default/files/styles/medium/public//sites/all/modules/rmodule/images/th/rafile4dc0cf3e5bedc2023de27b1195affcb0.jpg
-это урл картинки.
http://test1.ru/sites/default/files/styles/medium/public/ - ЛЕВОЕ ВАЩЕ, оно мне не нужно нафик, его дам друал подставил, и я никак это не могу выпилить, я даже через
_/sites/all/modules/rmodule/images/th/ - нормальный путь картинки
hook_page_view_alter и hook_node_view_alter пытался - не выпиливается блин! НУ НАФИГА ему такой механизм, я что обязан все файлв в папку public:// совать чтоли? А если это НЕПРИЕМЛИМО!
В моей ситуации копирование файлов из папки в папку не приемлимо, но блин и обойти никак не выходит.
Ребята подскажите что делать.
Вот коды хука node_view_alter:
function rmodule_node_view_alter(&$build){ $node = $build['#node']; if($node->type == "author_page"){ $build['author_image']['#items'][0]['uri'] = "/sites/all/modules/rmodule/images/th/".$build['author_image']['#items'][0]['filename'];//НЕ ВЫПИЛИВАЕТ, хотя урл меняется $build['author_image'][0]['#item']['uri'] = "/sites/all/modules/rmodule/images/th/".$build['author_image']['#items'][0]['filename'];//НЕ ВЫПИЛИВАЕТ $build['author_image'][0]['#item']['path'] = "/sites/all/modules/rmodule/images/th/".$build['author_image']['#items'][0]['filename'];//ТО-ЖЕ САМОЕ бблин(( $build['body']['#object']->author_image['und'][0]['uri'] = "/sites/all/modules/rmodule/images/th/".$build['author_image']['#items'][0]['filename']; }}
function rmodule_node_view($node, $view_mode, $langcode){if($node->type=='author_page'){ $node->content['author_image'][0]['#item']['uri'] = "123";
Вывод такой: http://test1.ru/sites/default/files/styles/medium/public/123
А надо просто 123...
Все вкурил, спасибо хД) Я думал что перед названием кастомного поля надо написать field_ вот так примерно $node->field_author_janre - это не работает.
Зато так $node->author_janre работает) Сам короче себя же и замудрил.---------- Добавлено 03.02.2013 в 11:37 ----------
О морали надо в другой теме рассуждать имхо) И не с сайта а из .csv файла.
strip_tags($spasennaja_fignja,"<p><span><a>");
К слову иногда левые <div> выдает word редактор. Если ваш автор писал в ворде и копировал в jce например - то вот и корень косяка.(Было дело на джумле раньше)
Здравствуйте. Я пытаюсь создать ноду программными средствами(drupal7).
Вот код:
$node = new stdClass(); $node->type = 'author_page';//машинное имя типа материала(см .install файл модуля) node_object_prepare($node); $node->title = "The Title";//$artist['title']; $node->language = LANGUAGE_NONE; // Добавляем текст материала $node->body[$node->language][0]['value'] = "<p>TEXT OF NODE</p>";//$artist['text']; $node->body[$node->language][0]['summary'] = text_summary("<p>TEXT OF NODE</p>");//text_summary($artist['text']); $node->body[$node->language][0]['format'] = 'filtered_html'; //добавляем поле картинки $file_path = drupal_get_path('module', 'rmodule') .'/images/th/rafile9cc75a85346ff6fd41e2799d18a2eaa5_prop_158x158.jpg'; // Create a File object $node->field_author_image[LANGUAGE_NONE][0] = array( 'alt' => "Описание", 'title' => "Заголовок", 'uid' => '1', 'filename' => $file_path, 'uri' => $file_path, 'filemime' => file_get_mimetype($file_path), 'status' => '1', ); $node->field_author_name['und'][0]['value'] = "Имя Автора";//$artist['title']; $node->field_author_janre['und'][0]['value'] = "Жанр";//$artist['janre']; node_submit($node); node_save($node);
Но к сожалению не выходит. Добавляется материал с заголовком The Title и контентом, НО дополнительные поля author_name и author_janre, а так-же поле с картинкой - пустуют. Кто-нибудь может подсказать в чем дело? Рою буржунет, пока ничего дельного не нарыл(
В общем если кому интересно - в базе данных создается таблица xmlsitemap, в которую мы можем в ручную требуемые значения засунуть сами хД И не надо всякие там АПИ пилить...---------- Добавлено 14.01.2013 в 20:49 ----------Хотя нет, все не совсем так. Вот моя реализация:
//Получаем последний ид элемент а в таблице xmlsitemap $qw = "SELECT `id` FROM {xmlsitemap} ORDER BY `id` DESC LIMIT 1"; $data = db_query($qw); $str_val = $data->fetchAssoc(); $link = array( 'id'=>($str_val['id'] + 1), 'type'=>'custom', 'loc'=>'rm/Кипелов', 'language'=>'und' ); xmlsitemap_link_save($link);
Drupal 7 Добавляем из стороннего модуля ссылку в карту сайта))
Да есть такая) Но надо из модуля все это добавлять а не руками) я ж не мазохист в конце концов хДД
Уважаемый форумчане. У Drupal есть модуль - XML Sitemap, кому интересно вот ссылка на скачку - http://drupal.org/project/xmlsitemap
Этот модуль формирует отличную карту сайта и очень многие(почти все) его ставят. В общем требуется из Стороннего модуля добавить в карту сайта ссылку. На идею как это сделать меня натолкнул вот этот линк: http://drupal.stackexchange.com/questions/16627/how-can-my-module-add-xml-sitemap-entries
Покопав исходные коды обоих функций я так и не понял, как-же выглядит массив $link и как его сформировать, чтобы там была простая обычная ссылка.
Пока в голову приходит только это(но не пашет):
$link = array("loc"=>$url,"type"=>"custom");
http://www.torrentino.com/torrents/678314 - ежели кто будет нормальную ссылку искать на эту книгу, то тут она. На англ по моему, но это не проблема, зато честно хД
Так там так и написано:
Implementation of hook_schema() in Form Messages Module’s formmsgs.install File <?php /** * @file * DB schema, install, and uninstall functions for AJAX Form Messages. * * The entity base table is defined here. */ /** * Implements hook_schema(). 550 CHAPTER 24 WRITING A MAJOR MODULE */ function formmsgs_schema() { $schema = array(); $schema['formmsgs'] = array( 'description' => 'Stores information about all formmsgs entities.', 'fields' => array( 'fmid' => array( 'type' => 'serial', 'not null' => TRUE, 'description' => 'Primary Key: Unique form message ID.', ), 'name' => array( 'description' => 'The machine-readable name of the form message.', 'type' => 'varchar', 'length' => 32, 'not null' => TRUE, ), 'label' => array( 'description' => 'The human-readable name of this form message.', 'type' => 'varchar', 'length' => 128, 'not null' => TRUE, 'default' => '', ), 'status' => array( 'description' => 'Boolean indicating whether the form message is active.', 'type' => 'int', 'size' => 'tiny', 'not null' => TRUE, 'default' => 1, ), ) + entity_exportable_schema_fields(), 'primary key' => array('fmid'), 'unique keys' => array( 'name' => array('name'), ), ); return $schema; }
Бло, по ходу модулю надо таки функцию удаления прописать...
Ща скачаю, спасибо)
А нифига, скачать эту самую книжку на халяву оказываться не получится(( Везде куда не плюнь все ссылки ведут на лохотрон и разводилово. Я конечно понимаю - люди бабло делают, но не так же бессовестно то. Тем более кому как не веб мастеру знать все эти уловки. В общем копаю дальше)
https://www.google.ru/search?q=CMS+Drupal+7.+%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE+%D0%BF%D0%BE+%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B5+%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B+%D1%83%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F+%D0%B2%D0%B5%D0%B1-%D1%81%D0%B0%D0%B9%D1%82%D0%BE%D0%BC&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ru:official&client=firefox-a#q=cms+drupal+7.+%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE+%D0%BF%D0%BE+%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B5+%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B+%D1%83%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F+%D0%B2%D0%B5%D0%B1-%D1%81%D0%B0%D0%B9%D1%82%D0%BE%D0%BC+%D1%81%D0%BA%D0%B0%D1%87%D0%B0%D1%82%D1%8C+%D0%B1%D0%B5%D1%81%D0%BF%D0%BB%D0%B0%D1%82%D0%BD%D0%BE&hl=ru&newwindow=1&client=firefox-a&tbo=d&rls=org.mozilla:ru:official&ei=FO7nUILRAqWO4gTOx4G4Bw&start=0&sa=N&bav=on.2,or.r_gc.r_pw.r_qf.&bvm=bv.1355534169,d.bGE&fp=8009d268bf6c1d76&bpcl=40096503&biw=1366&bih=661
Здравствуйте. В общем для осуществления одной весьма дельной задумки требуется создать в базе данных Drupal 7 таблицу. Я в этом не очень разбираюсь, в общем исходя из папки с примерами написания модулей получился такой код:
function rmodule_schema() { $schema['rmodule_users'] = array( 'description' => t('Индекс'), 'fields' => array( 'rid' => array( 'type' => 'serial', 'not null' => TRUE, 'description' => 'Primary Key', ), 'track_list' => array( 'type' => 'text', 'not null' => TRUE, 'default' => '', 'description' => 'Name of the person.', ), ), 'primary key' => array('pid'), 'indexes' => array( 'track_list' => array('track_list'), ), ); return $schema;}
Это дело было добавлено в файл .install самого модуля. После чего я удалил строчку описывающую модуль из таблицы SYSTEM и модуль переустановил. Но таблица не создалась( Что я не так делаю?---------- Добавлено 04.01.2013 в 23:03 ----------drupal_install_schema('rmodule_users'); в hook_init тоже не помогает(...---------- Добавлено 04.01.2013 в 23:05 ----------кеш чистил)---------- Добавлено 04.01.2013 в 23:18 ----------Нет я конечно и от руки это сделать могу, но ежели кто другой захочет использовать модуль - каково ему будет, и сколько на меня после этого матов снизойдет... К слову сказать модуль из админки не удаляетя, даже если его отключить(странно...) Поэтому приходиться из таблицы system его выпиливать - но судя по всему это не помогает)
Вот сколько в интернете инструкций по работе с базой данных drupal 7, по выборке, по сортировке и прочему, а про создание таблицы молчат... Или это как говорил наш препод по алгему - "Элементарно". Что подразумевает под собой - сложно но я знаю ответ, а ты никогда не догонишь)