HTML

View Péter Király's profile on LinkedIn

20 éves a MEK, 10 éves az EPA Én is
MEK önkéntes
vagyok

20 éves a MEK
10 éves az EPA

kirunews

Király Péter, keresés, Lucene, Solr, Java, Perl, PHP, OAI-PMH, webfejlesztés, digitális könyvtár, MARC, FRBR, RDA, Drupal, EAD, EAC, Europeana, eXtensibleCatalog.org, MEK, és sok minden más.

Friss topikok

Linkblog

Drupal 6 Social Networking

2009.05.06. 18:30 kirunews

Michael Peacock: Drupal 6 Social Networking (Packt Publishing, 2009, 312 oldal) (-> Packt (ebook: $27.19, print: 39.99, combo: $40.79), Amazon ($34.00-$55.27)

  • Chapter 1: Drupal and Social Networking
    • Social networking
    • Why create a social network instead of joining an existing one?
      • Improve business
      • Enable communication
      • Provide a service
      • So why create a social network?
    • DinoSpace!
      • What is a CMS?
      • What is Drupal?
    • Drupal as a social networking platform
    • Installing Drupal
      • Requirements
      • Download
      • Installation
    • Configuring Drupal
      • Actions
      • Administration theme
      • Clean URLs
      • Date and time
      • Error reporting
      • File system
      • Image toolkit
      • Input formats
      • Logging and alerts
      • Performance
      • Site information
      • Site maintenance
    • Summary
  • Chapter 2: Preparing Drupal for a Social Networking Site
    • How Drupal works
      • An abstract framework
      • Nodes
      • Content flags
      • Collaboration
      • Terminology
    • Administering Drupal: an overview
      • Logging in
      • User management
        • Access rules
        • Permissions
        • Roles
        • User settings
        • Users
      • Content management
        • Comments
        • Content
        • Content Types
        • Post settings
        • RSS publishing
        • Taxonomy
      • Site building
        • Blocks
        • Menus
        • Modules
        • Themes
      • Site configuration
      • Reports
        • Recent log entries
        • Top 'access denied' errors
        • Top 'page not found' errors
        • Available updates
        • Status report final
    • Planning our site
      • Static content
      • Grouping content
    • Starting to build our site
      • Taxonomy!
        • Creating the vocabulary
        • Creating terms and tags for our vocabulary
        • Creating another vocabulary—free tags
      • Creating content
    • Summary
  • Chapter 3: User Content: Contributions, Forums, and Blogs
    • Our site
    • User roles: an important note
    • Drupal modules
    • Comments
      • Comments within Dino Space
    • Forums
      • Planning
      • Creating and managing forums
      • Creating a forum topic
      • Taxonomies
      • Planning: How will roles fit in?
    • Blogs
      • Blog menu
      • Viewing blogs
      • Using the blog
      • Blog API
        • Posting a blog entry from Microsoft Word
    • Collaborative writing
      • Creating a book
      • Creating pages in the book
      • Permissions and roles
        • Why not grant all permissions?
    • Polls
      • Roles
    • Contributions in the form of pages
      • Permissions and roles
    • Uploaded files/attachments
    • Automatically generated content
      • Feed aggregator menu
      • Viewing the feed in action
      • Cron
    • Social aggregation
      • Download the module
      • Install and enable the module
      • Configure the module
      • Using the module
    • Roles
      • Anonymous role permissions
      • Authenticated users
      • Creating the additional roles
      • Contributors
      • Moderators
      • Power contributors
    • Summary
  • Chapter 4: Users and Profiles
    • What are we going to do and why?
    • Install the modules
    • Users, roles, and permissions
      • Users
        • Viewing/searching/sorting/filtering
        • Creating a user
        • Editing
      • Roles
      • Permissions
    • Adding special properties to user profiles
      • Module overview
      • Extending our users' profiles
        • Single-line text fields
        • Multi-line text fields
        • Date field
        • List selection field
        • Free form list field
        • Web address field
      • Editing our profile
        • About you
        • About your dinosaur
    • Tracking user activity
    • Settings and rules
      • Access rules
        • Blocking email domains
        • Preventing swear words in our user's usernames
        • Checking rules
      • User settings
        • User registration settings
        • User email settings
        • Picture settings
    • Blog themes
      • Enabling themes
      • Using the blog themes module
      • Expanding on this feature
    • Open ID
      • User already exists
      • User does not exist
    • Summary
  • Chapter 5: Enabling User Interaction
    • Dino Space: a review
    • Installing the modules
    • Relationships
      • Planning
      • Creating our relationships
      • Settings
        • General settings
        • Email notifications
        • Elaborations
        • Messages
      • Permissions
      • Relationships in action
        • Default relationship
        • Creating a relationship with another user
        • My relationships
    • User activities
      • Permissions
      • Activities in action
        • Public list
        • Friends list
        • Settings
    • Profile comments with the Guestbook module
      • Settings
        • Permissions
      • Site-wide guestbook
      • User guestbooks
      • Viewing guestbooks
    • Contacting users
      • User contact forms
      • Site-wide contact form
        • Creating the contact form categories
        • Adding information to the top of the form
        • Enabling the contact form in the menu
        • Taking the content form for a spin
    • Groups
      • Groups for Dino Space
      • Organic Groups module
        • Create group content type
        • Configure page content type
        • Enabling the block
        • Creating a group
    • Summary
  • Chapter 6: Communicating with our Users
    • Getting started
      • The modules
      • A look back
        • Modules
    • Communicating on an individual basis
      • Inactive users
      • Communicating with individuals publicly
    • Mailing lists
      • How to send an email to all our users?
      • HTML emails
      • Legalities
      • Throttling
      • Third-Party Services
        • PHPList
        • Constant contact
        • Google Groups
    • Direct contact
      • The address module
        • Users perspective
        • Administrators perspective
    • Content blocks
      • Creating a content block for anonymous users
    • Theme customizations for communication
    • Summary
  • Chapter 7: Improving our Network with Custom Modules
    • Our module
    • Drupal's modular system
      • A module
      • Useful resources
    • Creating our module
      • Content types
        • New content types
      • Google Maps
        • API key and the JavaScript files
      • Template files
        • node-map.tpl.php
        • node-venue.php
      • Module files
        • Directories and locations
        • .info files
        • .module files
        • .install files
      • Putting everything together
        • Installing the modules
        • Creating a map
        • Adding a venue
      • Seeing the module in action
    • Useful APIs
      • GMap
      • Facebook
    • Summary
  • Chapter 8: Designing our Site
    • Drupal themes
      • Themes and our users
      • Pre-installed themes
        • Bluemarine
        • Chameleon
        • Garland
        • Marvin
        • Minnelli
        • Pushbutton
      • Contributed themes
        • Installing contributed themes
    • Customizing the default theme
      • Color scheme
        • Custom color sets
        • Color set preview
      • Toggle display
      • Logo image design
      • Shortcut icon settings
      • Global settings
    • Creating a theme: The basics
      • Theme structure
        • Info file
        • Template files
        • Template.php
        • Logo and screenshot
        • Other files for themes
      • Getting started
        • Info file
        • Template files
        • Template.php
        • Logo and screenshot
        • In action
    • Summary
  • Chapter 9: Deploying and Maintaining our Social Networking Site
    • Installing the modules
    • Security
      • Security announcements
      • Securing our site
        • CAPTCHA
        • Mollom
        • Legal
        • Passwords
    • Deploying
      • Hosting and domain names
      • Getting the site online
        • Setting up the database
        • Uploading the site
        • Changing the database settings
    • Maintenance
      • Cron
      • Performing maintenance
        • Upgrading Drupal
      • Reports
        • How can these help?
    • Backing up
      • Backing up with cPanel
    • Restoring
      • Restoring within cPanel
    • Summary
  • Chapter 10: Promoting our Site
    • Online advertising
      • Buying advertisement space
      • Pay Per Click Advertisements
        • Advertisement networks provided by search engines
      • Newsletter advertising
      • Caution: Search Engine Penalization
    • Newsletters
    • Marketing materials
    • Social marketing
      • Viral marketing
      • Twitter
      • Social bookmarking
    • Search Engine Optimization
      • On-site SEO
        • Meta
        • Sitemap and webmaster tools
        • Links
        • Up-to-date content
      • Off-site SEO
    • Monetizing your site
    • Summary
  • Appendix: Installing WAMP
    • Installing WampServer
      • Downloading WampServer
      • Installing WampServer
    • WampServer overview
    • Configuring WampServer
      • GD2
      • Rewrite Module
    • Summary

Szólj hozzá!

Címkék: drupal books

Front End Drupal

2009.05.06. 18:29 kirunews

Konstantin Käfer, Emma Hogbin: Front End Drupal (Prentice Hall PTR, 2009, 456 oldal) (-> frontenddrupal.comPearson ($39.99, ebooks: $31.99), Amazon ($34.05-$39.99))

A Drupal "felszínéről", a web felület designjáról szól.

Chapter 1: Web Page Design

Describing Content
Organizing Lists of Content
Page Design and Layout
Interaction
Code
Work Flow
Summary

Chapter 2: The Themers’ Toolkit

A Gentle Introduction
Theming Strategies
Drupal Terminology
Must-Have Modules
Browser Tools
Language References
Maintaining Your System
Summary

Chapter 3: Working with Drupal Themes

Finding Themes
Installing Drupal Themes
Administering Themes
Anatomy of a Theme
Starter Themes
Migrating to Drupal 6
Summary

Chapter 4: The Drupal Page

Elements of a Page
Sitewide Page Variables
Navigation and Menus
Grid Work
Search
Changing Templates
Alias: Page
Taxonomy Templates
Delivering Plain Content
Summary

Chapter 5: Drupal Content

Node Templates
Gaining More Control Than $content Provides
Node Template Variables
Pages and Teasers
Images
Making Lists of Content with Views
Summary

Chapter 6: Customizing the Content-Editing Forms

Web Forms
Form Candy
Rich Text Editing
Altering Forms with FAPI
Multiple-Page Forms
Improving Access to Edit Screens
Summary

Chapter 7: Users and Community Participation

Users
Granting and Restricting Access
Community Comments
User-Generated Content
Spam
Private Web Site Areas
Summary

Chapter 8: Administrative Interfaces

Creating a Custom Administrative Interface
Task-Based Navigation
Administrative Menus
Administrative Dashboards and Control Panels
Custom Administrative Screens
Error!
Summary

Chapter 9: Learning JavaScript

JavaScript versus DOM
The JavaScript Language
Object Orientation in JavaScript
Summary

Chapter 10: An Introduction to jQuery

A First Look at jQuery
Using jQuery
Leveraging jQuery’s Full Potential
Using Other JavaScript Libraries
Summary

Chapter 11: JavaScript in Drupal

Server-Side Drupal Integration
Architecting a Component
Example: Horizontal Scroller
Using Plugins and jQuery UI
Summary

Appendix A: Installing Drupal

Setting Up a Development Server
Configuring Document Root and Virtual Hosts
Installing Drupal–and Common Hurdles to Its Installation
A Quick Glance at the Admin Area
Installing Modules

Appendix B: Supplemental Code

template
demo-module
template-skeleton
horizscroll and horizscroll-datasource
sparkline

Szólj hozzá!

Címkék: drupal books

Drupal in Education and E-Learning

2009.05.06. 18:27 kirunews

Bill Fitzgerald: Drupal in Education and E-Learning (Packt Publishing, 2008, 380 oldal) (-> drupal.org, Packt)

A drupal lehetőségeit és oktatását taglalja, a programozást nem érinti.

Szólj hozzá!

Using Drupal

2009.05.06. 18:27 kirunews

Jeff Robbins, Angela Byron, Addison Berry, Jeff Eaton, Nate Haug, James Walker: Using Drupal (O'Reilly, 2008, 492 oldal) (-> a könyv honlapja, a drupal.org-on, az O'Reilly-nél (eBook: $35.99, print: $44.99, combo: $49.49), az Amazonon ($32.96-$44.99))

Chapter 1 - Drupal Overview

What Is Drupal?
A Brief History of Content Management
How Does Drupal Work?
Getting Help
Conclusion

Chapter 2 - Drupal Jumpstart

Case Study
Spotlight: Content Management
Hands-On: Content Management
Spotlight: Modules
Hands-On: Working with Modules
Spotlight: Access Control
Hands-On: Creating Roles
Hands-On: Configuring Permissions
Hands-On: Contact Form
Spotlight: Taxonomy
Hands-On: Blog
Spotlight: Content Moderation Tools
Spotlight: Themes
Hands-On: Branding the Site
Spotlight: Content Editing and Image Handling
Spotlight: Input Formats and Filters
Hands-On: Setting Up FCKeditor
Summary

Chapter 3 - Job Posting Board

Case Study
Spotlight: CCK
Hands-On: CCK
Hands-On: Job Content Type
Hands-On: Customizing Field Display
Hands-On: Job Application Type
Spotlight: Views Module
Hands-On: The Views Module
Taking It Further
Summary

Chapter 4 - Product Reviews

Case Study
First Steps: Basic Product Reviews
Spotlight: Amazon Module
Hands-On: Adding an Amazon Field
Spotlight: Voting API and Fivestar
Hands-On: Adding Ratings
Hands-On: Building a Product List
Spotlight: The Search Module
Hands-On: Make the Product List Searchable
Spotlight: CSS Injector
Hands-On: Polishing the Presentation
Taking It Further
Summary

Chapter 5 - Wiki

Case Study
Implementation Notes
Hands-On: First Steps
Hands-On: Wiki Input Format
Spotlight: Pathauto
Hands-On: Pathauto
Spotlight: Drupal’s Revision Tracking
Hands-On: Revisions and Diff
Hands-On: New Pages and Recent Edits with Views
Taking It Further
Summary

Chapter 6 - Managing Publishing Workflow

Case Study
Hands-On: First Steps
Spotlight: Actions and Triggers
Hands-On: Actions and Triggers
Spotlight: Workflow Module
Hands-On: Creating a Workflow
Spotlight: The Workspace Module
Hands-On: Create Workspaces
Spotlight: Views Bulk Operations
Hands-On: Building an Administration Page
Taking It Further
Summary

Chapter 7 - Photo Gallery

Case Study
Implementation Notes
Spotlight: ImageField
Hands-On: Uploading Photos
Spotlight: ImageCache
Hands-On: ImageCache
Hands-On: Gallery View
Hands-On: Latest Photos Block
Hands-On: Custom Pagers
Taking It Further
Summary

Chapter 8 - Multilingual Sites

Case Study
Implementation Notes
Spotlight: Core Internationalization Features
Hands-On: Installing a Translation
Hands-On: Configuring Locale Features
Hands-On: Translatable Content
Spotlight: Localization Client
Hands-On: Translating the Interface
Hands-On: Translating Content
Spotlight: Internationalization
Hands-On: Internationalization Features
Taking It Further
Summary

Chapter 9 - Event Management

Case Study
Implementation Notes
Hands-On: First Steps
Spotlight: Date Module
Hands-On: Adding Dates
Hands-On: Upcoming Events View
Spotlight: Calendar Module
Hands-On: Calendar View
Spotlight: Flag Module
Hands-On: Flag Configuration
Hands-On: Attendee View
Taking It Further
Summary

Chapter 10 - Online Store

Case Study
Spotlight: Ubercart Packages
Spotlight: Ubercart’s Administration Panel
Hands-On: Setting Up the Store
Spotlight: Products, Product Classes, and Attributes
Hands-On: Creating Products
Spotlight: The Ordering Process
Hands-On: Processing Orders
Taking It Further
Summary

Chapter 11 - Theming Your Site

Spotlight: The Theme System
Hands-On: Creating a Custom Theme
Spotlight: Template Files
Hands-On: Working with Template Files
Spotlight: Advanced Overrides
Hands-On: Using template.php for Overrides
Taking It Further
Summary
References

Installing and Upgrading Drupal

Before You Begin Installation
Installing Drupal
Keeping Drupal Up-to-Date
Updating Drupal Core
Updating Contributed Modules
References

Choosing the Right Modules

Finding Modules
Assessing a Module’s Health
The People Behind the Code
Getting Involved
Summary
References

Modules and Themes Used in This Book

Szólj hozzá!

Drupal in Action

2009.05.06. 18:26 kirunews

Ezra Barnett Gildesgame, Greg Knaddison: Drupal in Action (Manning, 2009) (-> Manning MEAP: $27.50-$49.99, Drupal.org, Amazon, fórum)
A könyv még csak a Manning MEAP programjén keresztül érhető el, vagyis csak néhány fejezet PDF-ben. A nyomtatvány 2009 októbere körül érhető el.

Tartalomjegyzék:

Part 1: Introducing Drupal
What is Drupal? Why open source? Why Drupal?
Technical introduction to Drupal
The state of modern, interactive websites

Part 2: Fundamentals of publishing with Drupal
Basic publishing workflow with Drupal
Views: easily present and format lists of content without writing database queries
Using panels to create sophisticated landing pages
User-recommended content
Complete control of visual presentation
Images and image galleries

Part 3 Advanced publishing with Drupal
Advanced workflow with workflow/actions modules
Syndicating content and data migrations
Generating revenue
Performance and scalability
Managing repeatable site upgrades and deployments
The Drupal community

Szólj hozzá!

Címkék: drupal books

Leveraging Drupal

2009.05.06. 18:23 kirunews

Victor Kane: Leveraging Drupal. Getting Your Site Done Right. (Wiley, 2009, 480 oldal) (-> Wiley $41.70, drupal.org, Amazon $26.38-)

Part I: Launching Your Website as a Software Project

Chapter 1: Keeping It Simple

Getting with the ‘‘Program’’
Starting with a Map for Business Vision and Scope
Who’s Going to Use the Site?
What Are They Going to Use It For?
What Needs to Be Done So They Can Do That?
When Should You Do That?
What Should It Look Like?
Making Sure You’re Getting What You Really Want
Turning Over the Helm
Information Architecture and an Agile Approach for the Rest of Us
The Example Used throughout This Book
Summary

Chapter 2: Taking Baby Steps

Creating an Initial Environment
Installing Drupal as a ‘‘One-Click’’ Pre-Installed Script
Installing Drupal Right
Whipping up the Initial Prototype
Implementing Roles
Implementing the Business Objects
Putting the First Role to Work (Initial Basic CMS Workflow...)
Summary

Chapter 3: Getting Organized

Reviewing the Initial Environment
Housekeeping the SVN Repository and Trac Instance
Main Directory Structure for Drupal
Main Directory Structure for the Repository
Initial Import of the Codebase into the Repository
Getting the Test Site up and Running
Building on Your Initial Prototype
Creating the literary_piece Content Type
Enabling Comments for the literary_piece Content Type
Creating Some Magazines and Books
Setting up Some Forums
Setting up Blogs
Completing the Primary Menu
Committing to the Repository and Tagging the Initial Prototype
Deploying to the Test Site
Getting Initial Feedback from the Client
Summary

Chapter 4: Getting up to Speed

Finishing the User Stories with the Client
Planning the Project
Doing It on the Dining Room Table
Doing It with Trac
Doing It
Committing, Deploying to Test, Testing, Tracking
Working on the Architectural Baseline
Getting the Team Organized and with the Program
Whom Do You Need?
‘‘Who You Gonna Call?’’
Elaboration Phase Cleanup
Summary

Part II: Getting Your 5.x Site Up-To-Date

Chapter 5: Finishing up the Elaboration Phase

Creating an Initial Environment
How Can I Easily Update the Drupal Release?
How Can I Update Modules Easily and Cleanly?
Whipping up the Initial Prototype
A Workshop Leader Can Manage Affinity Groups
A Workshop Leader Can Broadcast Messages to Members
What’s Left?
Working on the Architectural Baseline
Summary

Chapter 6: Pushing the Envelope

You’ve GotMail!
Using Your Own dev Affinity Group
Rolling Your Own Document Case and Index
Implementing the Document Case
Views-Sorting Tweak
Now, Where Were We?
Creating the Menus and Navigation Blocks
Browsing and Filtering Views of Literary Pieces
Example: The Beta Milestone
Allowing Filtered HTML Formatting in the Text Area
The Tagadelic Module
Creating the View Itself
Using Exposed Filters with the View
Using Categories and Tag Clouds for Project Management
Summary

Chapter 7: Becoming an Expert Drupal Themer

On to Theming
Dividing and Conquering Complexity
Dynamic Content
Specifying Structure
Specifying Style
Synching Your Work with the Repository and the Test Site
Weak and Strong Points in Separation of Concerns with Drupal
Standing on the Shoulders of Giants—Reusing the Zen Theme
Creating Subthemes
Applying the Subtheme to the Quotation Block
Summary

Part III: Upgrading Your Drupal Site

Chapter 8: Upgrading to Drupal 6

Recommended Reading
Upgrading—The Basic Process
Step 1: Shifting Everything over to a Test Site
Installing Using a Complete Backup from Your Hosting
Quick and Dirty on the Command Line
Step 2: Updating to the Latest Drupal 5.x Version Available
Updating to 5.x Steps
The Sad State of My Modules
Doing What I Did
Step 3: Testing Everything in the Upgraded 5.x Version
Step 4: Making aModule Inventory
Step 5: Switching to the Default Drupal Theme
Step 6: Disabling All Contributed Modules
Step 7: Updating the Drupal Core
Step 8a: Enabling the Modules
Step 8b: Upgrading the Theme
Step 9: Re-running All Site Acceptance Tests
Step 10: Deploying
Summary

Chapter 9: Upgrading to Drupal 6 Revisited

Shifting Everything over to a Test Site
Update Everything to the Latest Drupal 5.x Version
Module Inventory for the On-Line Literary Workshop
Preparatory Steps before the Point of No Return
Physically Replacing the Drupal 5 Contributed Modules
Update Drupal Core and Run the Update Script
Solving Problems with Organic Groups
Escaped PHP Showing up in My Groups View
Group Home Pages No Longer Showing the Group’s Posts
Getting the Old Views Back
Installing the Advanced Help Module
Upgrading Your Zen Theme to Drupal 6.x
The All-New Devel Module
Committing and Deploying to the Test Site
Summary

Part IV: Getting the Most out of Drupal 6.x

Chapter 10: Installing and Using Drupal 6 Fresh out of the Box

Step 1: Installing Drupal—Easier Than Ever Before
Downloading Drupal
Unzipping and Preparing Files for Upload
Uploading Files
Creating the Database and User for the Drupal Installation
Running the Drupal Install Wizard
Step 2: Designing and Building the Architecture
Application Scope and Domain
Creating Roles and Users
Installing and Enabling Modules
Making the Site Bilingual
Step 3: Creating the Business Objects
Step 4: Creating the Workflows
Implementing the Registration Workflow
Implementing the Client’s Workflow
Implementing the Translator Team Leader’s Workflow
Implementing the Translator’s Workflow
Summary

Chapter 11: Full Swing Agile Approach to Drupal Development

Honing the Project Tools
Adding an Acceptance Test Node
Make a View to List User Stories
Making the User List Available
Creating a Block Menu to Easily Access the New View
Implementing the User Stories
Workshop Member: Starting an Affinity Group with Its Own Forums
A Publisher Can Browse Public Content
A Publisher Can Select Content for Inclusion in a Publication
A Publisher Can Manage a Publication
A Publisher Can Broadcast a Call for Pieces to be Submitted for a Publication
Initial Theming
On-Line Blog Functionality
Implementing Service Links
Implementing the Author Info Block for Individual Blogs
Implementing Recent Posts Block
Implementing the Blogroll
Summary

Chapter 12: The jQuery Chapter

Anatomy of a Rich Internet Application Framework
The Basics
Getting at the DOM with CSS
Getting at the DOM with JavaScript
Anatomy of jQuery and Its Plug-Ins
jQuery Itself
Our onload() Example Implemented with jQuery
A Theming Example
Plug-Ins
Drupal 5.x Uses of jQuery and Other JavaScript Libraries
jstools
Prototype and script.aculo.us
Drupal 5.x UI
The jQuery Update Module
Advanced Drupal 5.x Examples
Reusing the Collapsible Widget
Dependent Autocomplete Fields
Making Use of Hierarchical Select (Drupal 5.x)
Validate, Validate, Validate!
Drupal 5.x Thread
Drupal 6 Thread: An Ajax-Validated Application Form
Drupal 6.x jQuery Breakthrough
An Example jQuery Ajax Alarm Module for Drupal 6.x
Summary

Part V: Drupal 7 and the Road Ahead

Chapter 13: From Drupal 6 to Drupal 7 and Beyond
What’s Changed in Drupal 6?
Killing the Webmaster
Understanding the Drupal Blueprint from Drupal 7 On
Making the Historic Decision to Postpone the Drupal 7 Code Freeze
Listing the Drupal 7 Features
Drupal 7 Architectural Style
Drupal 7 Database API
Going PHP 5
Considering Usability Concerns, Usability Sprints
Projecting Drupal 7 Contributed Module Battle Plans
Installing Drupal 7
Developing aMinimalist On-Line Literary Workshop in Drupal 7
Creating Literary Pieces
Summary

Chapter 14: Deploying your Application as a Drupal Installation Profile

Leveraging the Advanced Help Module
Analyzing the Components of the Views 2 Help System
Planning the On-Line Literary Workshop Help System
Implementing the On-Line Literary Workshop Help System
Installing Profiles! Kill theWebmaster!
What Are Installation Profiles?
Analyzing Drupalbin: An Example Installation Profile
Writing the On-Line LiteraryWorkshop Installation Profile
Starting with a Clean Drupal Installation Tarball
Copying in the Modules and the Theme
Abstracting out the Views into the litworkshop Module
Preparing the ./profile Directory
Caveats
Creating the Drupal Installation Tarball Itself
Summary

Chapter 15: Acquia Drupal as an Enterprise-Ready Alternative

Trying out Acquia Drupal
Step 1: Creating a Subscription
Step 2: Setting up Acquia Drupal
Step 3: Registering Your Website with the Acquia Network
Step 4: Getting Support
Exploring the New Acquia Drupal Website Installation
Installing Updates
Introducing the AcquiaMarina Theme
Checking out Mollom
Using the Acquia Partner Program
Summary

Szólj hozzá!

Címkék: drupal books

Drupal 6 JavaScript and jQuery

2009.05.06. 18:17 kirunews

Matt Butcher: Drupal 6 JavaScript and jQuery (Pactk, 2009, 340 oldal) (-> Packt (ebook: $27.19, print: $35.19, combo: $40.79), Amazon ($34.58-$39.99)) 

  • Preface
  • Chapter 1: Drupal and JavaScript
    • Do you speak...?
      • PHP
      • SQL
      • HTML
      • CSS
      • XML
      • JavaScript
    • Drupal's architecture
      • The Drupal Core
      • The Theme Engine
      • Modules
    • Users, nodes, and blocks
      • Users
      • Blocks
      • Nodes
    • Drupal JavaScript development tools
      • A good editor
      • Firebug
      • The Drupal Devel package
    • Summary
  • Chapter 2: Working with JavaScript in Drupal
    • How Drupal handles JavaScript
      • Where Drupal JavaScript comes from?
    • Project overview: printer-friendly page content
    • The printer script
      • Drupal coding standards
        • Stylistic differences between PHP and JavaScript
      • The first lines
      • The print() function
    • Creating a theme
      • Full themes and subthemes
      • Creating a theme: first steps
        • Creating a theme directory
        • Creating the .info file
        • Adding files to the theme
      • The CSS file
      • Adding JavaScript to a theme
        • Overriding a template
        • Adding the script file
    • Summary
  • Chapter 3: jQuery: Do More with Drupal
    • jQuery: the write less, do more library
      • A first jQuery script
        • Getting jQuery
        • Starting with a basic HTML document
        • Querying with jQuery (and the Firebug console)
        • Bye bye, jQuery(); hello $()
        • Doing more with jQuery
    • Using jQuery in Drupal
      • Don't do it yourself!
    • Project: rotating sticky node teasers
      • The StickyRotate functions
        • The init() function
        • The periodicRefresh() function
        • Adding an event handler with jQuery
    • A brief look backward
    • Summary
  • Chapter 4: Drupal Behaviors
    • The drupal.js library
    • Drupal JavaScript behaviors
      • Defining a behavior to handle repeatable events
      • Telling Drupal to attach behaviors
        • Context and behaviors: bug potential
    • Project: collapsing blocks
    • Utilities
      • Checking capabilities with Drupal.jsEnabled
      • The Drupal.checkPlain() function (and the jQuery alternative)
      • The Drupal.parseJson() function
      • The Drupal.encodeURIComponent() function
      • The Drupal.getSelection() function
    • Project: a simple text editor
      • The main behavior
        • Step 1: find text areas that need processing
        • Step 2: add event handlers
        • Step 3: attach the button bar
    • Summary
  • Chapter 5: Lost in Translations
    • Translations and drupal.js
    • Translation and languages
      • Turning on translation support
      • Getting and installing translations
      • Configuring languages
        • Adding the language
        • Configuring languages
    • Using the translation functions
      • The Drupal.t() function
      • The Drupal.formatPlural() function
    • Adding a translated string
    • Project: weekend countdown
      • Translating the project's strings
      • Changing a translation file
    • Summary
  • Chapter 6: JavaScript Theming
    • Theming in PHP, theming in JavaScript
    • The Drupal.theme() function
    • Project: menus and blocks
      • Adding a block with a menu in it
      • Theming a block
      • Theming a menu
    • The JavaScript theming module
      • Theming tables
      • Sending notifications to the user
      • Adding links
    • Project: templates for JavaScript
      • The node template
      • From a template to a system: what next?
      • A template system
      • Theming with templates
      • Using the template system
      • A word of warning
    • Summary
  • Chapter 7: AJAX and Drupal Web Services
    • AJAX, JSON, XHR, AHAH, and Web 2.0
      • Web application and Web 2.0
        • The position of AJAX in Web 2.0
      • Getting technical
      • Move over, XML
    • Project: web clips with RSS and AJAX
      • Really Simple Syndication (RSS)
      • The project goals
      • Creating the web clips tool
        • The WebClips behavior
        • The WebClips.showItem() function
    • Project: real-time comment notifications
      • Displaying comments as notifications
      • Installing Views and Views Datasource
      • Creating a JSON view
      • The comment watcher
        • The comment watcher behavior
        • The CommentWatcher.check() function
        • Theming the comment notification
        • Managing cookies
    • Summary
  • Chapter 8: Building a Module
    • How modules work
      • The module structure
        • The directory
        • The .info file
        • The .module file
        • Where do modules go?
    • Project: creating a JavaScript loader module
      • Creating the module directory
      • A JavaScript sample
      • The module's .info file
        • A custom addition
      • The .module file
        • The jsloader_help() function
        • The jsloader_init() function
    • Project: the editor revisited
      • First step: creating the module
      • The CSS file
      • The bettereditor.module file
      • The bettereditor.js script
        • The editor() behavior
        • The insertTag() function
        • The addTag() theme
        • The button() theme function
        • The buttonBar() theme function
      • A last question
    • Summary
  • Chapter 9: Integrating and Extending
    • Project: autocompletion and search
      • The theory
      • Our plan
      • First step: creating the taxonomy
      • The new module
      • The search autocomplete JavaScript
    • Project: jQuery UI
      • What is jQuery UI?
      • Getting jQuery UI
      • The accordion module
      • The .info and .module files
      • The accordion JavaScript
    • Project: writing a jQuery plug-in
      • The plug-in code
        • A brief introduction to closures
        • The divWrap() function
    • Summary
  • Index

 

Szólj hozzá!

Címkék: drupal books

download and extract a zip in Java

2009.04.28. 15:29 kirunews

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipInputStream;

import java.net.MalformedURLException;
import java.net.URL;

public class getZip {

   // specify buffer size for extraction
   static final int BUFFER = 5 * 1024;

   public static void main(String[] args) {
     try {
       System.out.println("Example of ZIP file decompression.");

       // Specify file to decompress
       String inFileName = "http://www.gutenberg.org/feeds/catalog.rdf.zip";

       // Specify destination where file will be unzipped
       String destinationDirectory = ".";

       URL url = new URL(inFileName);
       InputStream in = url.openStream();

       // File sourceZipFile = new File(inFileName);
       File unzipDestinationDirectory = new File(destinationDirectory);

       // Open Zip file for reading
       ZipInputStream zipFile = new ZipInputStream(in);
       ZipEntry entry;
       while(((entry = zipFile.getNextEntry()) != null) && entry.getName().equals("catalog.rdf")) {
         System.out.println("Extracting: " + entry.getName());
         File destFile = new File(unzipDestinationDirectory, entry.getName());
         BufferedOutputStream dest = new BufferedOutputStream(
           new FileOutputStream(destFile), BUFFER);

         // read and write until last byte is encountered
         byte[] buff = new byte[BUFFER];
         int n;
         while ((n = zipFile.read(buff)) != -1) {
           dest.write(buff, 0, n);
         }
         dest.flush();
         dest.close();
         // is.close();
       }
       zipFile.close();

     } catch (MalformedURLException e) {
       e.printStackTrace();
     } catch (IOException e) {
       e.printStackTrace();
     }
   }

Szólj hozzá!

Drupal könyvek

2009.03.26. 09:38 kirunews

Szólj hozzá!

Címkék: drupal books

Solr hogyan

2009.03.03. 15:37 kirunews

Mi az a facetta? A válasz példákkal: http://www.searchtools.com/info/faceted-metadata.html. Röviden: kategóriák különféle ortogonális halmazaiban fellelhető tulajdonságok együttese. De inkább: a találati halmaz automatikus kategorizálása az egyes rekordokban található mező-értékek alapján. Segítségükkel könnyűszerrel áttekinthető és szűrhető a találati halmaz.

Példák a facettás keresésre:

Alap-paraméterek:

q = keresőkérdés

?q=ipod

mező szerinti keresés

?q=name:video

értéktartomány (-tól -ig) szerinti keresés

?q=price:[* TO 400]

wt = a válasz formátuma

// json formátum
?q=ipod&wt=json
// python formátum
?q=ipod&wt=python
// ruby formátum
?q=ipod&wt=ruby
// natív php formátum
?q=ipod&wt=php
// natív szerializált php formátum
?q=ipod&wt=phps
// xml formátum
?q=ipod&wt=xml
// xslt-vel átdolgozott xml formátum
?q=ipod&wt=xslt

indent = a válasz indentálása

// a válasz könnyen olvasható
?q=ipod&wt=json&indent=on

fl = a találati listában szereplő mezők

// találati lista csak a name, id és price mezőket tartalmazza
?q=video&fl=name,id,price
// minden mező
?q=video&fl=*
// ... és a speciális, Solr-generálta score-t (a találat súlyát)
?q=video&fl=name,id,price,score

sort = rendezés <mező> (asc|desc). Az alapérték: score desc.

// rendezés növekvő sorrendben
?q=video&sort=price asc&fl=name,id,price
// rendezés csökkenő sorrendben
?q=video&sort=price desc&fl=name,id,price
// rendezés több mezőre
?q=video&sort=inStock asc,price desc&fl=name,id,price
// rendezés score alapján
?q=video&sort=price desc,score asc&fl=name,id,price

start = a találati lista első rekordjának sorszáma (mint az SQL-ben az OFFSET)
rows = a találati lista elemeinek a száma (mint az SQL-ben a LIMIT)

// 10 találat az első találattól
?q=price:[* TO 4000]&start=0&rows=10

fq = szűrő keresés (Filter Query). Ez egy plusz szűrő a találati listán, vagyis a találati súlyokat nem befolyásolja, hanem csak a listát szűkíti. Fontos, hogy szűrők gyorstárazva vannak, így felgyorsítja a kereséseket. Az fq paraméter ismételhető, vagy egy kereséssé is kombinálható.

debugQuery = a keresés debug információinak megjelenítése

?q=cat:electronics+Belkin&version=2.1&start=1&rows=1&indent=on&fl=id+name+score&debugQuery=on

qt = a keresés típusa. Meghatározza, hogy a keresést melyik kezelő dolgozza fel. A lehetséges értékek:

standard StandardRequestHandler
dismax DisMaxRequestHandler - egyszerű keresés több mezőben (a neve a Lucene DisjunctionMaxQueries-ből származik)
spellchecker SpellCheckerRequestHandler - megadja (a q paraméterrel) adott kifejezés helyesírási javaslatait

 

Az egyes kezelők egyéni paraméterei

standard paraméterek

q.op = a keresés alapértelmezett logikai operátora (AND vagy OR)

df = az alapértelmezett mező

dismax paraméterek:

qf = mezők és súlyuk. A formátuma: fieldOne^2.3 fieldTwo fieldThree^0.4. A keresés csak ezekre a mezőkre fog kiterjedni. ( dismax queryben).

mm = a minimális lehetséges találat. Alapértelmezésben a q-kifejezések VAGY-lagosak, nem kötelezőek. Az mm-mel megmondhatjuk, hogy minimálisan hány keresőkifejezés legyen benne a találatokban. Több féle értéket meg lehet adni: "2", "75%", "2<-75%" (ha két kifejezés van, mindkettő legyen benne, ha több, akkor legalább 75%), "2<-1 5<80%" (ha kettő kifejezés van, mindkettő legyen benne, 3 és 5 között az aktuálisnál egyel kevesebb, e fölött 80%). Részletek itt.

pf = phrase fields

ps = Phrase Slop.

qs = Query Phrase Slop

tie = Tie breaker.

bq = boost query. Az eredménylistát lehet vele súlyozni, ugyanazzal a szintaxissal, mint a qf esetében. A keresés a configban vagy a qf-ben beállított mezőkben történik, nem az itt megadottakban.

bf = boost function

Egyes formátumok paraméterei

A JSON paraméterei

json.nl az eremény NamedList-ként való listázása. Itt a sorrend fontosabb, mint a kulcsonként való elérés, ezt a Python és Ruby is használhatja. A lehetséges értékei:
json.nl=flat (ez az alapérték)  - egyszerű tömb: [name1,val1, name2,val2]
json.nl=map - JSON objektum
json.nl=arrarr - kételemű tömbök tömbje: [[name1,val1], [name2, val2], [name3,val3]]
json.wrf <function> - egy callback függvény hozzárendelése

?q=ipod&wt=json&indent=on&json.nf=arrarr&json.wrf=showResults

Az xml paraméterei

version

Az XML response writer verziószáma. A lehetséges értékek:

2.0 A többértékű mezőknél csak akkor használja az <arr> taget, ha az adott rekordban ténylegesen több érték van.
2.1 Minden többtérékű mezőnél <arr> taget használ.
2.2 <responseHeader> helyett <lst>
stylesheet Meg lehet adni egy XSLT stíluslapot, amire betesz a Solr egy hivatkozást


Az xslt paramétere

tr Az XSLT stíluslap. A conf/xslt könyvtárba kell elhelyezni.


Ha XSLT 2.0-át ismerő Saxont akarjuk használni, a Jetty-t a következőképpen kell elindítani:

java -Djavax.xml.transform.TransformerFactory=net.sf.saxon.TransformerFactoryImpl -jar start.jar

A facettás keresés paraméterei

Általában minden, az alábbiakban felsorolt paraméter felülírható egy adott mező tekintetében az alábbi módon: f.<fieldName>.<originalParam>=<value> például: f.category.facet.limit=5

facet = a facettás keresés bekapcsolása. Csak a "true" kapcsolja be.

Keresés alapú facetta

facet.query = a facetta keresőkérdése

?q=video&rows=0&facet=true&facet.field=inStock&facet.query=price:[*+TO+500]&facet.query=price:[500+TO+*]

Mező alapú facetta

facet.field = a mező meghatározása (ismételhető). Mező alapú facetták esetén legalább egy ilyen paramétert meg kell adni.

// facet fields
?q=ipod&rows=0&facet=true&facet.limit=-1&facet.field=cat&facet.field=inStock

facet.prefix = a mezőérték kezdete. Csak az ennek megfelelő értékek lesznek facetták.

?q=hatcher&wt=ruby&indent=on&facet=on&rows=0&facet.field=text&facet.prefix=xx&facet.limit=5&facet.mincount=1

facet.sort = "true" rendezés mennyiség alapján, "false" az index-ben elfoglalt hely (általában ábécé sorrend) alapján. Az 1.4-ben true/false helyett count/index lesz a két érték.

facet.limit = hány érték szerepeljen a facettában. -1 = végtelen, alapérték: 100.

?rows=0&q=inStock:true&facet=true&facet.field=cat&facet.limit=5

facet.offset = offset a lapozáshoz. Alapérték: 0.

facet.mincount = a facetta minimális mennyisége. Alapérték: 0.

// 0-ás értékek nélkül
?q=ipod&rows=0&facet=true&facet.limit=-1&facet.field=cat&facet.mincount=1&facet.field=inStock

facet.missing = "true": hány hiányzó van? hány olyan dokumentum van, aminek nincs olyan mezője, amiből a facettát számoljuk?

// 0-ás értékek nélkül és hiányzók számával
?q=ipod&rows=0&facet=true&facet.limit=-1&facet.field=cat&f.cat.facet.missing=true&facet.mincount=1&facet.field=inStock

facet.method = milyen algoritmust használjon a Solr a mező faccettálásakor. "enum": minden érték figyelembevételével, "fc": a gyorsítótárban lévő dokumentumok mezőinek értéke alapján (alapérték)

facet.enum.cache.minDf = minimális dokumentum gyakoriság (csak a facet.method=enum esetén használható) (1.4-es paraméter)

Dátum alapú facetta

facet.date = a dátumot tartalmazó mezők nevei

facet.date.start = a dátum kiindulási pontja

facet.date.end = a dátum végpontja

facet.date.gap = az egységek időtartama (pl. facet.date.gap=+1DAY)

?q=*:*&rows=0&facet=true&facet.date=timestamp&facet.date.start=NOW/DAY-5DAYS&facet.date.end=NOW/DAY+1DAY&facet.date.gap=+1DAY

facet.date.hardend = (boolean) mit tegyen a Solr, ha az utolsó gap túlnyúlik az end-en? true: az utolsó gap kisebb lesz, false: az utolsó gap vége lesz az utolsó időpont az end helyett.

facet.date.other = egyéb dátumok. before, after, between. none, all.

A kivilágítás paraméterei

Általában minden, az alábbiakban felsorolt paraméter felülírható egy adott mező tekintetében az alábbi módon: f.<fieldName>.<originalParam>=<value> pl. f.contents.hl.snippets=2

hl = "true" - bekapcsolja a kivilágítást. Bármilyen egyéb érték kikapcsolja.

hl.fl = a kivilágításban számításba veendő mezők listája (vesszővel vagy szóközzel elválasztva). Alapérték: az alapértelmezett mezők (config, df, qf). Használható * is, még csonkolásban is (text_*).

hl.snippets = a szövegdarabok maximális száma. (Alapérték: 1)

hl.fragsize = a szövegdarabok karakterhossza. Alapérték: 100. 0 = az egész mező.

hl.mergeContiguous = "true": a folytatólagos szövegrészek egybeolvasztása. (Alapérték: false)

hl.requireFieldMatch = "true": csak azokat a mezőket világítja ki, amelyekben van találat. Alapérték: false.

hl.maxAnalyzedChars = a dokumentum hány karakterét vizsgálja meg a részletek előállításakor. Alapérték: 51200.

hl.alternateField = ha nincs kivilágítandó mező, akkor ennek a mezőnek az értékét írja ki.

hl.maxAlternateFieldLength = ha van hl.alternateField, akkor ez az érték adja meg a mező kiiratásának hosszát.

hl.formatter = formázó. Jelenleg csak "simple" lehet.

hl.simple.pre/hl.simple.post = a szövegrész előtt/után álló szöveg (Alapérték: <em>/</em>).

hl.fragmenter = a fragmentum-előállító megadása. Alapérték: "gap". Lehetséges még: "regex".

hl.usePhraseHighlighter = "true": egy speciális osztály (SpanScorer) használata kifejezéses keresés esetén. Alapérték: false.

hl.regex.slop = annak az értéke, hogy a regex milyen arányban térhet el a hl.fragsize-ban megadott értéktől (pl. 0.2 = 20%).

hl.regex.pattern = a regex minta regex fragmentáló esetén. Alapérték: [-\w ,/\n\"']{20,200}.

hl.regex.maxAnalyzedChars = regex esetén a maximális elemzett karakterhossz. Alapérték: 10000.

Hasonló dokumentumok keresése (MoreLikeThis)

 

Általános paraméterek

mlt.fl = a hasonlóság alapjául szolgáló mezők. Ha lehetséges, ezek TermVector stored-ak legyenek.

mlt.mintf = minimális kifejezés-gyakoriság (a dokumentumban)
 
mlt.mindf = minimális dokumentum gyakoriság (csak azok a kifejezések amelyek legalább ennyi dokumentumban szerepelnek)

mlt.minwl = minimális szó-hosszúság. 

mlt.maxwl = maximális szó-hosszúság.

mlt.maxqt = a figyelembe veendő keresési kifejezések maximális száma.
 
mlt.maxntp = ha nincs eltárolva a mező TermVectora, akkor a parsolásnál mennyi legyen a figyelembe vett tokenek száma.

mlt.boost = true/false: érvényesüljön-e a keresés során a kifejezés relevancia szerinti súlya? 

mlt.qf = keresésben szereplő mezők és súlyok (ahogy a dismax-ban van). A mezőket az mlt.fl paraméterben is meg kell adni.

Standard keresés dokumentumhasonlósági paraméterei

mlt = true: a dokumentumhasonlóság bekapcsolása

mlt.count = a hasonló dokumentumok maximális száma a találati listában
?q=apache&mlt=true&mlt.fl=manu,cat&mlt.mindf=1&mlt.mintf=1&fl=id,score

A leindexelt kifejezések listáinak megjelenítése (TermEnum)

A TermsComponent SearchComponent egy egyszerű plugin a Lucene TermEnum elérésére. Egyszerű, mivel a TermDocs- és a pozícióinfókat nem tartalmazza.

terms={true|false} - a TermsComponent be-/ki- kapcsolása

terms.fl={mező neve} - melyik mező kifejezéseit jelenítsük meg? kötelező.

terms.lower={az első kifejezés} - opcionális. melyik legyen az első megjelenítendő kifejezés. Ha nincs, akkor a mező első tárolt kifejezése lesz.

terms.lower.incl={true|false} - opcionális. Tartalmazza-e az elsőnek megkívánt kifejezést, vagy az utánna következő legyen az első? Alapértelmezés: true.

terms.mincount=<Integer> - opcionális. A kifejezés minimálisan ennyi dokumentumban forduljon elő.

terms.maxcount=<Integer> - opcionális. A kifejezés maximálisan ennyi dokumentumban forduljon elő. Alapérték: -1 (nincs maximális érték)

terms.prefix={String} - opcionális. Csak azon kifejezések, melyek ezzel a sztringgel kezdődnek.

terms.rows={integer} - a visszaadott kifejezések száma. Vagy ezt, vagy a terms.upper-t kötelező megadni. Ha nincs megadva, megnézi a "rows" konfigurációt(CommonParams.ROWS). Ha az sincs, akkor 10. Ha 0-nál kisebb, akkor az összes sor, maximum Integer.MAX_VALUE.

terms.upper={az utolsó kifejezés} - A lista utolsó kifejezése. Ez vagy a terms.rows kötelező.

terms.upper.incl={true|false} - opcionális. Tartalmazza-e a lista a terms.upper-ben megadott kifejezést? Alapérték: true.

Az első 10 kifejezés a "name" mezőből:

http://localhost:8983/solr/autoSuggest?terms=true&terms.fl=name 

.. az a-től kezdve:

autoSuggest?terms=true&terms.fl=name&terms.lower=a... a-tól b-ig

autoSuggest?terms=true&terms.fl=name&terms.lower=a&terms.upper=b... az a utáni első kifejezéstől b-ig

autoSuggest?terms=true&terms.fl=name&terms.lower=a&terms.upper=b&terms.lower.incl=false... a-tól b-ig 2 kifejezést:

autoSuggest?terms=true&terms.fl=name&terms.lower=a&terms.upper=b&terms.rows=2

keresési tipp

autoSuggest?terms=true&terms.fl=name&terms.lower=at&terms.prefix=at&terms.lower.incl=false&terms.upper=b

 

 

...

qt Query Type - keresés típusa, melyik RequestHandler dolgozza fel a kérést. Alapértelmezés: standard.
wt Writer Type, vagyis a ResponseWriter típusa, vagyis milyen formátumú legyen a találati lista. Alapértelmezése: standard. Néhány egyéb típus: json, python, php, phps (ezeket külön kell engedélyezni a konfigurációban - a phps a serializált PHP változó), xml (default)
q Query Term - a keresőkérdés
rows A megjelenítendő rekordok száma
indent a találat formázása (pl. json esetén)
fl fields - a visszadatott mezők megadása. A score egy speciális számított mező, a dokumentum keresés során adott súlyát adja vissza. A mezőket vesszővel kell elválasztani. * is használható
sort Rendezés. sort=<mezőnév> [desc|asc]
   
   
   
   
   
   
   
   

 

 

Egyszerű facetták. Nekünk kell megadni a mezőt és a mezőértéket is (SimpleFacetedRequestHandler).

?qt=qfacet&q=video&fc=inStock:true&fc=inStock:false

Dinamikus facetták. A mezőket kell megadni és a Solr a mezők tartalma alapján gyártja a facettákat (DynamicFacetedRequestHandler).

?qt=dfacet&q=video&ff=cat&ff=inStockEgyéb fontos Solr jellemzők:

Indexelés URL-en keresztül:

/solr/update?stream.body=<commit/>
/solr/update?stream.body=<optimize/>
/solr/update?stream.body=<delete><query>office:Bridgewater</query></delete>

 

Luke paraméterek

Alap URL:

/admin/luke

numTerms = az egyes mezők leggyakoribb kifejezéseinek száma (10)

/admin/luke?fl=text&numTerms=100

fl = a kiiratandó mezők neve

/admin/luke?fl=text&numTerms=100

id = azon dokumentum lekérdezése, melynek az id-je ezzel az értékkel egyezik meg

/admin/luke?id=SOLR1000

docId = ezt az értéket használó Lucene documentum lekérése

/admin/luke?docId=2

show=schema = a sémafájl lekérdezése

/admin/luke?show=schema

A Luke használható a wt és tr paraméterekkel

/admin/luke?wt=xslt&tr=luke.xsl

 

 

Szólj hozzá!

Corrupt Index

2009.02.26. 13:33 kirunews

Ellenőrzés:

java -jar Lucene-2.4.0.jar org.apache.lucene.index.CheckIndex [index dir]

 Javítás:

java -jar Lucene-2.4.0.jar org.apache.lucene.index.CheckIndex [index dir] -fixEz minden problémát okozó szegmenst eltávolít, vagyis az ottani tartalmak eltűnnek. Utánna valahogyan ellenőrizni kell, hogy az állapot mennyire tükrözi a valóságot.

Szólj hozzá!

MultiReader, IndexSearcher

2009.02.26. 12:19 kirunews

IndexReader[] readers = new IndexReader[searchables.length];
for (int i =0 ; i < searchables.length;i++) {
  IndexSearcher indexSearcher = (IndexSearcher)searchables[i];
  readers[i] = indexSearcher.getIndexReader();
  IndexReader newReader = readers[i].reopen();
  if (newReader != readers[i]) {
    readers[i].close();
  }
  readers[i] = newReader;
}

multiReader = new MultiReader(readers);
IndexSearcher indexSearcher = new IndexSearcher(multiReader);

OpenBitSetFacetHitCounter facetHitCounter = new OpenBitSetFacetHitCounter();

 

 

 

Szólj hozzá!

Címkék: lucene

integer vs sint

2009.02.26. 12:15 kirunews

> What are the differences between using an sint and an integer, aside
> from the range queries on sint? If I've indexed a field as an
> integer, and I try to sort on it, will there be performance problem?

Nope.  If you don't need range queries, use "integer". Sorts work correctly on both because the sort code does not rely on the index order of the terms.

-Yonik
Lucene/Solr? http://www.lucidimagination.com
 

Szólj hozzá!

Címkék: solr

SKOS Core Vocabulary Specification

2009.02.16. 10:37 kirunews

http://www.w3.org/TR/2005/WD-swbp-skos-core-spec-20051102/

A SKOS (Simple Knowledge Organisation System - egyszerű tudásszervezési rendszer). A tudásszervezési rendszerek pongyolán megfogalmazva azok a metaadat rendszerek, amiket eredetileg dokumentumok tartalmi feltárására hoztak létre, pl. tezaurusz, osztályozási rendszerek (Dewey Decimal Classification, Egyetemes Tizedes Osztályzás), tárgyszórendszerek, taxanómiák, folkszonómiák, glosszáriumok, és más rendezett terminológia gyűjtemények. A SKOS Core ezen rendszerek számára hoz létre egy egységes modellt és RDF szótárat. Mivel RDF-gráfokat alkot, a SKOS-szótárakat alkalmazhatjuk RDF állítások állítmányaként.

A konkrét KOS-ok fogalmak közti kapcsolati hálókat írnak le, ehhez egy korlátos relációtípus-szótárat használnak, pl. a taxanómiában csak egyetlen reláció van: a generikus alá- és fölérendeltség (egymás inverzei), a szinomítatárban pedig csak a mellérendeltség (asszociáció). A tezaurusz ennél összetettebb relációszótárral dolgozik, hiszen itt a generikus és az asszociatív kapcsolaton kívül van partitatív reláció (része-egésze) és előzménye-következménye reláció, valamint a fentiekbe be nem sorolható esetekre alkalmazott egyéb rokonsága is.

A SKOS az RDF-re és az RDF-séma rendszerekre épül, ennek elemeit használja.

A SKOS-ban lévő osztályok:

A SKOS osztályai
CollectableProperty A skos:Collection-nel használható tulajdonság.
The following rule applies for this property: [(?x ?p ?c) (?c skos:member ?y) (?p rdf:type skos:CollectableProperty) implies (?x ?p ?y)]
Collection Fogalmak jelentéssel bíró gyűjteménye
Labelled collections can be used with collectable semantic relation properties e.g. skos:narrower, where you would like a set of concepts to be displayed under a 'node label' in the hierarchy.
Concept Elvont elképzetés; gondolati egység
ConceptScheme Fogalmak halmaza, opcionálisan a fogalmak közti szemantikus kapcsolatokról szóló kijelentéseket is tartalmaz.
Thesauri, classification schemes, subject heading lists, taxonomies, 'folksonomies', and other types of controlled vocabulary are all examples of concept schemes. Concept schemes are also embedded in glossaries and terminologies.
A concept scheme may be defined to include concepts from different sources.
OrderedCollection Fogalmak rendezett gyűjteménye, ahol mind a csoportosításnak, mind a rendezésnek jelentése van.
Ordered collections can be used with collectable semantic relation properties, where you would like a set of concepts to be displayed in a specific order, and optionally under a 'node label'.
A SKOS tulajdonságai
altLabel A forrás alternatív lexikális megnevezése.

Acronyms, abbreviations, spelling variants, and irregular plural/singular forms may be included among the alternative labels for a concept. Mis-spelled terms are normally included as hidden labels (see skos:hiddenLabel). 
altSymbol A forrás alternatív szimbólikus megnevezése.
broader Általánosabb jelentésű fogalom.

Broader concepts are typically rendered as parents in a concept hierarchy (tree).
changeNote Megjegyzés a fogalom változtatásairól. 
definition A fogalom jelentésének megállapítása vagy formális kifejtése. 
editorialNote A szótár szerkesztőjének, fordítójának vagy karbantartójának szóló megjegyzés.
example Fogalomhasználati példa.
hasTopConcept Felső szintű fogalom a fogalmi sémában.
hiddenLabel Olyan megnevezés, amit a képi megjelenítéskor el kell rejteni, de a szöveges keresés számára elérhető.
historyNote Megjegyzés a fogalom múltbeli állapotával, felhasználási módjával, jelentésével kapcsolatban. 
inScheme A fogalmi séma, amiben helyet kap a fogalom.
A fogalom több sémának is eleme lehet.
isPrimarySubjectOf Olyan erőforrás, aminek a fogalom az elsőrendű tárgya.
isSubjectOf Olyan erőforrás, aminek a fogalom az egyik tárgya.
member Gyűjtemény eleme.
memberList Egy rendezett gyűjtemény elemeit tartalmazó RDF lista,
The following rule applies for this property: [(?c skos:memberList ?l) elementOfList(?e,?l) implies (?c skos:member ?e)] 
narrower Specifikusabb jelentésű fogalom.
A szűkebb fogalmakat tipikusan a mint a fogalom gyermekeit jelenítik meg a fogalmi hierarchiában (fában).
note Kötetlen célú általános megjegyzés.
A tulajdonságot használhatjuk közvetlenül, vagy egy sajátosabb megjegyzés típus szuper-tulajdonságaként.
prefLabel A forrás előnyben részesített adott nyelvű szöveges megnevezése.
Ugyanazon fogalmi sémában két fogalomnak nem lehet ugyanazon skos:prefLabel értéke egy adott nyelven.
prefSymbol A forrás előnyben részesített szimbólikus megjelenítése.
No two concepts in the same concept scheme may have the same value for skos:prefSymbol.
primarySubject Azon fogalom, mely a forrás elsődleges tárgya.
A resource may have only one primary subject per concept scheme.
related Azon fogalom, amivel asszociatív szemantikus kapcsolat áll fennt.
scopeNote A fogalom jelentésének pontosításában segítő megjegyzés.
semanticRelation A jelentéssel kapcsolatos fogalom.
This property should not be used directly, but as a super-property for all properties denoting a relationship of meaning between concepts. 
subject A fogalom, ami a forrás tárgya.
The following rule may be applied for this property: [(?d skos:subject ?x)(?x skos:broader ?y) implies (?d skos:subject ?y)]
subjectIndicator A fogalom tárgyának jelölője ('subject indicator'). [A 'subject indicator' jelölést az OASIS Publikált Tárgyszavak Technikai Bizottság (OASIS Published Subjects Technical Committee) által jóváhagyott legutóbbi meghatározásra való utalással definiáljuk.]
This property allows subject indicators to be used for concept identification in place of or in addition to directly assigned URIs.
symbol Olyan kép, ami a forrást szimbolikusan jelöli.
This property is roughly analagous to rdfs:label, but for labelling resources with images that have retrievable representations, rather than RDF literals.

 

 Látható, hogy a SKOS-ban nincs meg a relációknak az a gazdagsága, ami a tezauruszokban megvan. A Z39.19 szabvány így definiálja ezeket a kapcsolatokat:

Z39.19
BT Broader Term
BTG Broader Term (generic)
BTI Broader Term (instance)
BTP Broader Term (partitive)
HN History Note
NT Narrower Term
NTG Narrower Term (generic)
NTI Narrower Term (instance)
NTP Narrower Term (partitive)
RT Related Term
SN Scope Note
TT Top Term
U USE
UF USED FOR
X SN See Scope Notes for ...

 

A magyar Köztaurusz ennél összetettebb és más szintaktikát használ:

A Köztaurusz relációi
F Generikus (nem-faj) kapcsolat - felérendeltje
A Generikus (nem-faj) kapcsolat - alárendeltje
T Partitív (egész-rész) kapcsolat - egésze
P Partitív (egész-rész) kapcsolat - része
R Előfeltétel/kiindulás - rezultáns/következés kapcsolat - következés (okozat, következmény, cél, hatás, eredmény, terméke, rendeltetés stb.)
E Előfeltétel/kiindulás - rezultáns/következés kapcsolat - előfeltétel, ami valamit meghatároz (ok, indíték, eredet, eszköz, valamire irányuló tevékenység, hatás előidézője
X Rokonsági (egyéb) kapcsolat
L Lásd/Helyett kapcsolat - kitüntetett szinonima, kváziszinonima (szinonimának tekintett kifejezés)
H Lásd/Helyett kapcsolat - helyett (az előző fordítottja)
L& Lásd ÉS-kapcsolat (több kifejezés együttesen a vezérszó kitüntetett kváziszinonímái)
H& Helyett ÉS-kapcsolat
LV Lásd VAGY-kapcsolat (a deszkriptorok valamelyike a vezérszó kitüntetett szinonimája vagy kváziszinonimája)
HV Helyett VAGY-kapcsolat
!= "Lásd más értelemben" kapcsolat (több jelentésű szavak esetén a nem megegyező jelentés kizárására)

 

Ungváry Rudolf észrevételei*

*2010. október 25-én Ungváry Rudolf megkért, hogy tegyem közzé az észrevételeit. Sajnos a hozzászólásokban nem lehet formázni a szöveget, ezért a szöveg mögé illesztem az észrevételeit. A továbbiakban Ungváry Rudolf szövege következik. (Király Péter)

 

Tartok tőle, hogy ez a felsorolás elavult. Úgy fest, hogy a most aktuális

http://www.w3.org/TR/skos-primer/#secrelationshipslabels

alapdokumentumhoz képest részben hiányok tapasztalhatók, részben avultságok találatók benne.

Mégis érdemes volt lefordítani, mert a viszonylag rövid értelmezések kiegészíthetők a jövőben.

 

Ungváry Rudolf

 

A SKOS osztályai
CollectableProperty

 

Lexikai egységek közös kapcsolódási tulajdonsága

A skos:Collection-nel használható tulajdonság.

E tulajdonság alkalmazására a következő szabály érvényes: [(?x ?p ?c) (?c skos:member ?y) (?p rdf:type skos:CollectableProperty) implikálja, hogy (?x ?p ?y)

Collection

A fogalmaknak tartalma van. Jelentése csak szavaknak van. Ezért: Közös kapcsolódási tulajdonságú lexikai egységek összessége Lexikai egységek összessége fogható össze az olyan relációkkal, mint pl. skos:narrower, melyben az „elágazásjelölő” alatt jeleníthetik meg a fogalmi csoportot a hierarchiában.

Megjegyzés: az elágazásjelölő (node label) meghatározása hiányzik, holott létezése a SKOS-on belül a fentiekből következik!

Concept

Értelmetlen, mert eszerint a gondolat is belefér, holott a SKOS csak fogalmakat kezel, a fogalmakból összetett gondolatokat (pl. „megyek az utcán”, „a világ érthetetlen”) aligha. Helyesen: fogalom (pl. járókelő, érthetetlen világ)

ConceptScheme

Strukturált fogalmi rendszer

Tezauruszok, osztályozási rendszerek, tárgyszójegyzékek, taxonómiák, folkszonómiák és egyéb szabványosított-nyelvi szótárak mind példái a strukturált fogalmi rendszerek reprezentációjának. Két fajtájuk a szótár és a terminológiai gyűjtemény.

 

A strukturált fogalmi rendszereket azért hozzák létre, hogy különféle források fogalmait összegyűjtsék és rendezetten reprezentálják.

OrderedCollection

Elágazásjelölőhöz tartozó lexikai egységek rendezett összessége

A lexikai egységek rendezett összessége fogható össze megfelelő csoportosításban adott szemantikai relációbah, opcionálisan az „elágazásjelölő” segítségével.

 

A SKOS tulajdonságai
altLabel

A fogalom nem kitüntetett (szinonim, alternatív) neve, más néven nemdeszkriptor.
Megjegyzés: A SKOS nyelvén a „label” lexikai egység
Ez a szöveg a SKOS jelölőnyelv-művelői/informatikusi tájékozatlanságról árulkodó leszűkítés, és azóta rég elhagyták, mert azért ez a tiszteletreméltó szakma is képes a fejlődésre, nem csak a könyvtári. Helyesebb volna tehát a http://www.w3.org/TR/skos-primer/#secdocumentation szövegét átvenni, amely egyébként már példamutatóan gazdag és ezért szép, és gyöngéd figyelmeztetést is tartalmaz a számtalan nehezen tájékozódó számára. Ime magyarul:

Ez a tulajdonság különösen hasznos, ha kitüntetett lexikai egységen kívüli szavakat, például a szinonimákat is kezelni kell. Jegyezzük meg azonban, hogy nem csak erre alkalmas, hanem arra is, hogy rövidítéseket, mozaikszavakat vagy kváziszinonimákat reprezentáljuk hasonló módon. Az is lehetséges, hogy a fölérendelttel reprezentáljunk alárendelteket („upward posting”, ISO 2788). Ez akkor valósul meg, ha adott fogalomnak az alárendelt fajfogalmait nem kívánjuk a rendszerben kitüntetett lexikai egységként (mint „prefLabel”, deszkriptor) kezelni, hanem nedeszkriptorként kezeljük az ismeretszervező rendszerben.

altSymbol A fogalom nevének szimbolikus formája (rövidítése, szimbóluma)
broader

(az általánosabb jelentésű fogalom a generikus fölérendelt; a puszta „broader” bármilyen hierarchikusan értelmezett fölérendelt lehet, nem csak generikus). Ezért: fölérendelt

A fölrendelt fogalmak a fogalmi hierarchiában átfogó szerepet játszanak (azaz adott fában a szülő csúcsot alkotják)

changeNote Nem a fogalom, hanem annak neve változhat az időben. Ezért: Változásmegjegyzés
definition Terpeszkedő megfogalmazás. A „magyar lélek” (nem csak annak neonyilas változata) a ragozó anyanyelve következtében a tömörítésre hajlik. Elég: Meghatározás
editorialNote Szerkesztőségi megjegyzés
example Nem a fogalom, hanem a lexikai egység használatáról van szó. Fogalmat csak az elme használ, informatikai rendszer erre (egyelőre) képtelen. Ezért: Alkalmazási példa
hasTopConcept A „broader” is „felső szintű”. Ez olyan fogalom lexikai egysége, melynél az adott (általában generikus) hierarchialáncban nincs általánosabb a rendszerben. Azaz: Csúcsfogalom

 

hiddenLabel Kép megjelenítésekor elrejtendő, de a szöveg szerinti kereséskor elérhető lexikai egység
historyNote

Történeti megjegyzés.

Nem a fogalom állapotáról (sic!), még kevésbé a felhasználási módjáról, horribile dictu nem létező jelentéséről van szó! Annak a történetéről viszont igen, ami a lexikai egységgel megnevezett fogalom terjedelmébe esik (au „autó” esetén a konkrét autók történetéről, „Budakeszi” esetén a település történetéről).

inScheme Az egy kezelési egységet alkotó struktúrált fogalmi rendszeren belüli részrendszer (tezauruszok esetén résztezaurusz). Azaz: Részrendszer (résztezaurusz)
isPrimarySubjectOf Szakbarbár fogalmazás: A fogalom legfontosabbnak tekintett forrása
isSubjectOf A forrás tárgya (az a fogalom, melyről a forrás szól)
member Elágazásjelölőhöz kapcsolódó lexikai egység
memberList

Adott elágazásjelölőhöz kapcsolódó lexikai egységek összessége
Erre a tulajdonságra a következő szabály érvényes: [(?c skos:memberList ?1) elementOfList(?e, ?1) implikálja, hogy (?c skos:member ?e)]

narrower

Nem, lásd a broadernél. Helyesen: alárendelt
Emberszabású fogalmazásban: Az alárendelt fogalom lexikai egységeit a fölérendelt fogalomhoz kapcsolva jelenítik meg a fogalmi hierarchiában (azaz „szülő–gyermek” fa keletkezik)

note

Megjegyzés

Magyarázat: A „megjegyzés” („note”) lehetséges tartalma nincs meghatározva. Ha van speciális megjegyzéstípus, akkor a „megjegyés” a generikus fölérendelt szerepét játsza („szupertulajdonság”)

prefLabel

A fogalom kitüntetett lexikai egysége (a deszkriptor).

Ugyanabban a strukturált fogalmi rendszerben általában nem lehet két fogalomnak adott nyelven ugyanaz a kitüntetett lexikai egysége (deszkriptora), noha lehetnek rendszerek, melyekben egymással ekvivalencia relációban összekapcsolt lexikai egységek nevezik meg ugyanazt a fogalmat, azaz egy fogalomnak több deszkriptora is lehetséges.

Figyelem: ezt módosítani kellett, mert levéltári rendszerekben például ragaszkodhatnak ahhoz, hogy egymással ekvivalencia relációban összekapcsolt lexikai egységek nevezzék meg ugyanazat a fogalmat, azaz több deszkriptor lehetséges, és opcionálisan adható meg kereséskor, hogy csak az egyik, vagy mindegyik szerint keressünk!

prefSymbol

 

A fogalom kitüntetett jelképe, képi ábrázolása (vizuális megjelenésű „deszkriptor”).
Tájékozatlanság! Lásd előbb!

 

primarySubject

A forrás elsődleges tárgya (az a fogalom, melyről a forrás elsősoreban szól)

A fogalomnak csak egyetlen elsődleges forrása lehet.

related A fogalom egyéb rokonértelmű szemantikai kapcsolata
scopeNote Általános nyilvános megjegyzés
semanticRelation

Szemantikai reláció
Ez a tulajdonság nem közvetlenül használandó, hanem generikus fölérendeltje minden, a fogalomtartalmak alapján a fogalmak között fennálló speciális szemantikai relációknak

subject

A fogalom további forrása (az elsődleges forráson kívül)
Erre a tulajdonságra a következő szabály érvényes: [(?d skos:subject ?x)(?x skos:broader ?y) implikálja, hogy (?d skos:subject ?y)]

subjectIndicator

Tárgyjelölő (a témát azonosító forrás: szöveg, név, kép, hang vagy mindezek kombiációja)

[A 'tárgyjelölő' az OASIS Publikált Tárgyszavak Technikai Bizottság (OASIS Published Subjects Technical Committee) határozta meg:.]

A tárgyjelölő olyan forrás, mely közvetlenül és egyértelműen azonosítja az ember számára a témát, tárgyat, dolgot. Lehet szöveges meghatározás, leírás vagy név, lehet kép- vagy hang- vagy egyéb formájú ábrázolás vagy ezek kombinációja. A tárgyjelölőt a tárgya egyértelműsíti, melyet jelöl.

A tárgyjelölő olyan tulajdonság, mely lehetővé teszi a fogalom azonosítását közvetlen URI alkalmazása nélkül vagy azzal együtt.

symbol

A fogalom jelképe, képi ábrázolása (vizuális megjelenéfogalomazonosító)

Ez a tulajdonság az rdfs:label (a lexikai egység) vizuális megfelelője, de a képpel azonosított források inkább tekinthetők kereshetőbb reprezentációknak, mint az RDF-szövegek.

Megjegyzés a tezaurusz relációinak táblázatához:

„A magyar Köztaurusz ennél összetettebb és más szintaktikát használ:”

Ez az állítás megtévesztő. A Köztauursz és a Z39.19 relációtípusai alapvetően megegyeznek, de a Köztaurusz tartalmaz még további néhány relációtípust is. Más szóval a Köztaurusz tartalmazza a Z39.19 összes relációtípusát, és rajtuk kívül még néhány továbbit is.

A megjegyzések dolgában a Köztaurusz a MARC21 összes megjegyzéstípusát tartalmazza, ezért több megjegyzéstípust kezel, mint amennyi (egyetlen egy) a Z39.19-ben van.

Továbbá:

A Köztaurusz tartalmazza a SKOS kiterjesztett relációkészletét, és minden megjegyzéstípusát, továbbá opcionálisan további szemantikai relációtípusokat és további megjegyzéstípusokat (többek között lehetséges bennük kezelni a levéltári szabvány szerinti relációtípusokat és megjegyzéstípusokat).

Szólj hozzá!

Keresés kijelölt szöveg alapján

2008.11.07. 10:40 kirunews

<a href="javascript:q = "" + (window.getSelection ? window.getSelection() : document.getSelection ? document.getSelection() : document.selection.createRange().text); if (!q) q = prompt("Search words", ""); if (q!=null) location="http://www.answers.com/" + escape(q).replace(/ /g, "+"); void 0">Answers.com Search Selected</a>

szebben tördelve (csak a JavaScript rész)

q = ""
  + (window.getSelection
     ? window.getSelection() // Mozilla
     : document.getSelection
       ? document.getSelection()
       : document.selection.createRange().text);

if (!q)
 q = prompt("Search words", "");

if (q!=null)
 location = "http://search.live.com/results.aspx?q="
          + escape(q).replace(/ /g, "+");

void 0

 

Szólj hozzá!

Hogyan beszélgessünk olyan könyvekről, melyeket nem olvastunk?

2008.11.06. 21:03 kirunews

Tavaly jelent meg a Párizs VIII Egyetem irodalomprofesszora, Pierre Bayard nagy feltűnést keltett szellemes műve, a "Hogyan beszélgessünk olyan könyvekről, melyeket nem olvastunk?".

Bayard egyik elődjeként hivatkozik Umberto Ecora.

A New York Public Library egy asztalhoz ültette a két professzort, hogy beszéljenek az olasatlan könyvekkel kapcsolatos elképzeléseikről és mutassák meg többek között, hogy miként is nézne ki a gyakorlatban egy ilyen beszélgetés. Az ülést Paul Holdengraber, a könyvtár nyilvános programokért felelős igazgatója vezeti, aki maga sem marad el szellemességben Eco és Bayard mögött.

http://fora.tv/2007/11/17/Bayard_and_Eco_How_to_Talk_About_Books_You_Havent_Read

Vigyázat, a teljes beszélgetés közel két óra!
 

Szólj hozzá!

A MARC-ról

2008.09.19. 12:15 kirunews

A MARC az ún. ISO-fájlformátumot használja (standard binary format - ISO 2709). A rekord szerkezetét a http://www.loc.gov/marc/specifications/ írja le.

Speciális karakterek (név = hexa kód = jelölés a szabványban):

megnevezésjeleASCII hexa codeASCII decimal codejelölés a szabványban
field terminatorFT1E30^
fill character 7C124|
delimiter 1F31$
blankSP2032#
record terminatorRT1D29\

 

 Karakter set-ek:

Ha a Leader 9-ik karaktere ' ', akkor MARC-8, egyébként UTF-8 (a szabványban: UCS/Unicode).

A rekord szerkezete:

  • LEADER
  • DIRECTORY
  • FT
  • CONTROL_NUMBER_FIELD
  • FT
  • CONTROL_FIELD_1
  • FT
  • ...
  • CONTROL_FIELD_n
  • FT
  • DATA_FIELD_1
  • FT
  • ...
  • DATA_FIELD_n
  • FT
  • RT

 

Szólj hozzá!

Drupal API tanulás - 03 - A node-ok

2008.08.14. 19:01 kirunews

A node-ok a következő tulajdonságokkal rendelkeznek:

nid: egyedi azonosító.
vid: egyedi változat azonosító (revision ID).
type: node típus, pl. blog, story, article, image, stb.
title: 128 karakter hosszú rövid cím. Ha nincs azt 0 jelzi a node_type.has_title mezőben.
uid: a szerző felhasználói azonosítója (user ID). Alapértelmezésben minden node-nak egy szerzője van.
status: 0 = unpublished (rejtett, jogosultsági szint: “administer nodes”); 1 = publikált, (jogosultsági szint: “access content”).
created: Unix timestamp.
changed: Unix timestamp
comment: (integer) a kommentárok státusa:

  • 0 = Comments have been disabled (default).
  • 1 = No more comments are allowed
  • 2 = Comments can be viewed/created

promote: (integer) megjelenjen-e a főoldalon?

  • 1 = igen
  • 0 = nem

moderate: (integer) 0 = moderation is disabled, 1 = enabled. Figyelem: There is no interface in the core Drupal installation for this field.
sticky: (integer) 1 = a node sticky, 0 = a nod nem sticky. A “sticky” node-ok a listák élére kerülnek.

Ha új node típust készítünk egy node modult kell írni. Lépések:

1) .install fájl, benne:

function <module>_install() {
  // create table(s)
}

function <module>_uninstall() {
  db_query('DROP TABLE {<module>}');
}
2) .info fájl

3) .module fájl, benne:

a node definíciója (hook_node_info()):

function <module>_node_info() {
  // We return an array since a module can define multiple node
  // types. We're only defining one node type.
  return array(
    '<module>' => array(
      'name' => t('<Module>'), // Required.
      'module' => '<module>', // Required.
      'description' => t('...'), // Required.
      'has_title' => TRUE,
      'title_label' => t('Title'),
      'has_body' => TRUE,
      'body_label' => t('The content'),
      'min_word_count' => 2,
      'locked' => TRUE
    )
  );
}
menü callback függvény (hook_menu()):

function <module>_menu($may_cache) {
  $items = array();
  // Do not cache this menu item during the development
  if (!$may_cache) {
    $items[] = array(
      'path' => 'node/add/<module>',
      'title' => t('<module>'),
      'access' => user_access('create <module>'),
    );
  }
  return $items;
}
engedélyek definiálása (hook_perm()):

function <module>_perm() {
  return array('create <module>', 'edit own <module>');
}
engedélyezés (hook_access()):

function <module>_access($op, $node) {
  global $user;
  if ($op == 'create') {
    return (user_access('create <module>'));
  }
  if ($op == 'update' || $op == 'delete') {
    return (user_access('edit own <module>')
            && ($user->uid == $node->uid));
  }
}
az űrlap testreszabása (hook_form()):

function <module>_form($node) {
  // Get metadata for this node type
  // (we use it for labeling title and body fields).
  // We defined this in <module>_node_info().
  $type = node_get_types('type', $node);

  $form['title'] = array(
    '#type' => 'textfield',
    '#title' => check_plain($type->title_label),
    '#required' => TRUE,
    '#default_value' => $node->title,
    '#weight' => -5
  );

  $form['body_filter']['body'] = array(
    '#type' => 'textarea',
    '#title' => check_plain($type->body_label),
    '#default_value' => $node->body,
    '#rows' => 7,
    '#required' => TRUE
  );

  $form['body_filter']['filter'] = filter_form($node->format);

  $form['punchline']['field'] = array(
    '#type' => 'textarea',
    '#title' => t('Punchline'),
    '#required' => TRUE,
    '#default_value' => $node->punchline,
    '#weight' => 5
  );
  $form['punchline']['filter'] = filter_form(
                                   $node->punchline_format);

  return $form;
}
ellenőrzés (hook_validate):

function <module>_validate($node) {
  // Enforce a minimum word length of 3.
  if (isset($node->punchline) 
      && str_word_count($node->punchline) <= 3) {
    $type = node_get_types('type', $node);
    form_set_error(
      'punchline', 
      t('The punchline of your #type is too short. You need at least three words.',
      array('#type' => $type->name)));
  }
}
mentés (hook_insert):

function <module>_insert($node) {
  db_query("INSERT INTO {<module>} (nid, vid, punchline)
            VALUES (%d, %d, '%s')",
            $node->nid, $node->vid, $node->punchline);
}
módosítás (hook_update):

function <module>_update($node) {
  if ($node->revision) {
    <module>_insert($node);
  } else {
    db_query("UPDATE {<module>} SET punchline='%s'
              WHERE vid=%d", $node->punchline, $node->vid);
  }
}
törlés (hook_delete):

function <module>_delete(&$node) {
  db_query('DELETE FROM {<module>} WHERE nid = %d', $node->nid);
}
az egyedi attribútumok betöltése a node-ba (hook_load):

function <module>_load($node) {
  // a theme által használt JS-hez:
  drupal_add_js('misc/collapse.js');
  return db_fetch_object(db_query(
     'SELECT punchline FROM {<module>} WHERE vid = %d',
     $node->vid));
}
megjelenítés (hook_view):

function <module>_view($node, $teaser = FALSE, $page = FALSE) {
  if (!$teaser) {
    // Use Drupal's default node view.
    $node = node_prepare($node, $teaser);

    // Add a random number of Ha's to simulate a laugh track.
    $node->guffaw = str_repeat(t('Ha!'), mt_rand(0, 10));

    // Now add the punchline.
    $node->content['punchline'] = array(
      '#value' => theme('<module>_punchline', $node),
      '#weight' => 2
    );
  }

  if ($teaser) {
    // Use Drupal's default node view.
    $node = node_prepare($node, $teaser);
  }

  return $node;
}
Enélkül csak a standard node mezők (title, body) jelennének meg.

Sminkelés.

themes/<theme_name>/node-<module>.tpl.php:

<div class="node<?php if ($sticky) { print " sticky"; } ?>
  <?php if (!$status) { print " node-unpublished"; } ?>">
  <?php if ($picture) {
    print $picture;
  }?>
  <?php if ($page == 0) { ?><h2 class="title"><a href="<?php
    print $node_url?>"><?php print $title?></a></h2><?php }; ?>
  <span class="submitted"><?php print $submitted?></span>
  <span class="taxonomy"><?php print $terms?></span>
  <div class="content">
    <?php print $content?>
    <fieldset class="collapsible collapsed">
      <legend>Punchline</legend>
      <div class="form-item">
        <label><?php print check_markup($node->punchline)?></label>
        <label><?php print $node->guffaw?></label>
      </div>
    </fieldset>
  </div>
  <?php if ($links) { ?><div class="links">» <?php print $links?></div>
  <?php }; ?>
</div>
Nem saját típusú node-ok módosítása (hook_nodeapi):

hook_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL)$op - az aktuális művelet, ami lehet:

  • delete
  • insert
  • load
  • view
  • update
  • validate
  • submit
  • prepare
  • print
  • search result
  • update index
  • rss item

Ha az $op == "view", $a3 = $teaser (boolean vagyis 'is teaser?') és a $a4 = $page (boolean vagyis 'is page?')

Szólj hozzá!

Drupal API tanulás - 02 - database abstraction layer

2008.08.14. 17:55 kirunews

DB beállítás a sites/default/settings.php fájlban:

$db_url = 'mysql://username:password@localhost/databasename';Néhány lekérdezés (CRUD):

db_query('SELECT * FROM {joke} WHERE vid = %d', $node->vid);
db_query("INSERT INTO {joke} (nid, vid, punchline) VALUES
    (%d, %d, '%s')", $node->nid, $node->vid, $node->punchline);
db_query("UPDATE {joke} SET punchline = '%s' WHERE vid = %d",
    $node->punchline, $node->vid);
db_query('DELETE FROM {joke} WHERE nid = %d', $node->nid);

Helyettesítők:

%s - String
%d - Integer
%f - Float
%b - Binary data; do not enclose in ' '
%% - % jel
Egyszerű érték lekérdezése:

$sql = "SELECT COUNT(*) FROM {node} WHERE type = 'blog'
        AND status = 1";
$total = db_result(db_query($sql));
Sorok lekérdezése:

$sql = "SELECT * FROM {node} WHERE type = 'blog' AND status=1";
$result = db_query(db_rewrite_sql($sql));
while ($data = db_fetch_object($result)) {
   $node = node_load($data->nid);
   print node_view($node, TRUE);
}
Limit:

$sql = "SELECT * FROM {node} n WHERE type = 'blog' 
        AND status = 1 ORDER BY n.created DESC";
$result = db_query_range(db_rewrite_sql($sql), 0, 10);
Dinamikus paraméterezés:

$type = 'blog';
$status = 1;
$sql = "SELECT * FROM {node} n WHERE type = '%s' AND status = %d
        ORDER BY n.created DESC";
$result = db_query_range(
              db_rewrite_sql($sql), $type, $status, 0, 10
);
Lapozás (nem az API része):

$sql = "SELECT * FROM {node} n WHERE type = 'blog'
        AND status = 1 ORDER BY n.created DESC";
$result = pager_query(db_rewrite_sql($sql), 0, 10);
while ($data = db_fetch_object($result)) {
    $node = node_load($data->nid);
    print node_view($node, TRUE);
}
// Add links to remaining pages of results.
print theme('pager', NULL, 10);
Több adatbázis használata:

$db_url['default'] = 'mysql://user:password@localhost/drupal5';
$db_url['legacy']  = 'mysql://user:password@localhost/legacydb';
...
db_set_active('legacy');
$result = db_query("SELECT * FROM ldap_user WHERE uid = %d",
                    $user->uid);
// Switch back to the default connection when finished.
db_set_active('default');
Adatbázis séma updateje. Az .install fájlban:

function book_update_1() {
  $items = array();
  $items[] = update_sql("ALTER TABLE {book}
    ADD COLUMN rank int_unsigned NOT NULL default '0'");
}

(Az első update az _1-es, a második a_2-es, stb. A számot a system tábla tárolja.)

Uninstall. Az .install fájlban:

function annotate_uninstall() {
  db_query("DROP TABLE {annotations}");
  variable_del('annotate_nodetypes');
}
API függvények:

_db_query($query, $debug = 0)
db_affected_rows()
db_connect($url)
db_decode_blob($data)
db_distinct_field($table, $field, $query)
db_encode_blob($data)
db_error()
db_escape_string($text)
db_fetch_array($result)
db_fetch_object($result)
db_lock_table($table)
db_next_id($name)
db_num_rows($result)
db_query_range($query)
db_query_temporary($query)
db_result($result, $row = 0)
db_status_report($phase)
db_table_exists($table)
db_unlock_tables()
db_version()

Szólj hozzá!

Drupal API tanulás - 01

2008.08.14. 17:30 kirunews

Az .install akkor fut le, ha system.schema_version == -1.

Űrlap-elem típusok:

'#type' => 'checkboxes'
'#type' => 'radios' [#options => array(value, value, ...)]
'#type' => 'value',
'#type' => 'textarea',
'#type' => 'textfield',
'#type' => 'submit',
'#type' => 'fieldset',
Írás/olvasás a variables táblába:

variable_get(<key>, <default value>)
variable_set(<key>, <value>)

Üzenet kiiratása a képernyőre:

drupal_set_message(...);Modul meglétének ellenőrzése:

module_exist('devel')Cache ürítése (devel modul):

devel/cache/clear
devel_cache_clear()
A node-típusok listája:

node_get_types('names')Dátum formázása:

$timestamp = format_date(time(), 'small');Cím beállítása:

drupal_set_title()

Szólj hozzá!

CVS project - szerver beállítás

2008.08.14. 13:31 kirunews

cd /usr/local/cvsroot/
mkdir <project_name>
vi CVSROOT/loginfo
vi CVSROOT/modules
chgrp -R cvsuser <project_name>
chmod -R 770 <project_name>

 

Szólj hozzá!

Címkék: unix cvs

word2007 indexelése

2008.04.11. 15:53 kirunews

metaadatok: http://weblogs.asp.net/pschneider/archive/2006/12/10/get-docprops-cmdlet-for-powershell.aspx

Indexing Word 2007 (docx) files with Zend_Search_Lucene

Szólj hozzá!

Solr - teljesítménytuning

2008.04.09. 10:41 kirunews

How to improve Solr search performance?, válasz, válasz

Válaszok lényege: a mezők prefetch-e ront a teljesítményen + esetleg érdemes lehet JSON-t használni XML helyett.

A teljesítménymérésre használt eszköz: http://en.wikipedia.org/wiki/LoadRunner

 

Szólj hozzá!

Solr - adatbázis import

2008.04.09. 10:34 kirunews

Solr + Complex Legacy Schema -- Best Practices?, válasz1, válasz2

800MB does not seem that big. Since all of your 6 tables have product
information it should not be very difficult to join them together and import
them into one Solr index. Again, all of this depends on what you're
searching on and what you want to display as results.

Have you taken a look at http://wiki.apache.org/solr/DataImportHandler ?
Although it is still in development, we've used it successfully to import
data from a large collection of tables joined together.

Két megoldás: csináljunk egy nézetet, ami minden adatottartalmaz és az legyen a Documentum illetve az egyes táblák legyenek dokumentum típusokká konvertálva, amik facet-ként működnek a kereséskor.

6 komment

mailbox indexelés

2008.04.07. 12:41 kirunews

Mailbox parser könyvtárak

  • Apache James' MIME4J
  • Javamail
  • Aperture

Apache James' MIME4J is one parser and Javamail also can parse mail.  I found
Javamail more intuitive, but have not tested either against a large mail set for
reliability and performance. (forrás)

You might have a look at Aperture (http://aperture.sourceforge.net).  
It supports a fair number of mail sources including mbox and imap, I 
think. (forrás)

Szólj hozzá!